我正在尝试创建一个 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中,因此它在后台运行。
答案 0 :(得分:0)
AsyncTask
旨在用于短期操作,并且不在内部使用Looper
,这是相机API所需的。可以使用HandlerThread
,也可以使用Thread
自己管理Looper
。
但是,在使用后台线程时,您可能会遇到与Android M +相关的其他电源管理相关问题。为了节省电池寿命,背景操作受到限制。确保您需要在后台使用相机。