AsyncTask中的openCamera返回“IllegalArgumentException”

时间:2018-02-13 16:34:07

标签: android android-asynctask android-camera2

我正在尝试创建一个 AsyncTask ,它将在后台拍照,但我正在接收

  

java.lang.IllegalArgumentException:Handler参数为null,但调用线程中不存在looper

doInBackgroung 方法中,我得到了:

    @Override
protected String doInBackground(Object[] objects) {
    startBackgroundThread();
    openCamera();
    takePicture();
    return "Executed";
}

然后在 openCamera 方法中:

private void openCamera() {
    CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
    try{
        cameraId = manager.getCameraIdList()[1];
        CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
        StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
        assert map != null;
        imageDimension = map.getOutputSizes(SurfaceTexture.class)[0];

        manager.openCamera(cameraId,stateCallback,null); //It is breaking here

    } catch (CameraAccessException e) {
        e.printStackTrace();
    }
}

有任何建议我该如何解决?

编辑:忘记提及应用程序在我使用普通活动时工作正常,但现在我想将相机代码移动到AsyncTask中,因此它在后台运行。

1 个答案:

答案 0 :(得分:0)

AsyncTask旨在用于短期操作,并且不在内部使用Looper,这是相机API所需的。可以使用HandlerThread,也可以使用Thread自己管理Looper

但是,在使用后台线程时,您可能会遇到与Android M +相关的其他电源管理相关问题。为了节省电池寿命,背景操作受到限制。确保您需要在后台使用相机。