我知道有很多关于上述例外的问题,但仍然无法找到答案并决定自己提问。 在使用camera2进行捕获时,有时会抛出异常,有时会进入背景状态。 例外情况显示在以下行中:
try {
if ((null != mCaptureSession) && (isCameraOpen)) {
mState = STATE_PREVIEW;
mCaptureSession.capture(mPreviewRequestBuilder.build(), mCaptureCallback, mHandler);
}
} catch (CameraAccessException e) {
L.e("CameraLolipop --- CameraCaptureSession.CaptureCallback " + e);
}
在mCaptureSession.capture上....我试图检查mCaptureSession是否可以进行处理,它适用于23及以上的设备。 但其余的事情都无法做任何其他事情。 伙计们,请帮助找到解决方案。 提前谢谢。
以下是例外:
java.lang.IllegalStateException: Session has been closed; further changes are illegal.
at android.hardware.camera2.impl.CameraCaptureSessionImpl.checkNotClosed(CameraCaptureSessionImpl.java:569)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.capture(CameraCaptureSessionImpl.java:152)
at java.lang.reflect.Method.invoke(Native Method)
at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
答案 0 :(得分:1)
简单的解决方案用于具有isReprocessable()方法的api> = 23 Camera2,对于api <23则使用Camera1。 祝您编码愉快!
答案 1 :(得分:0)
我面临同样的问题,我解决了隐藏纹理onPause并发送一个线程完成关闭相机之前它改变/关闭和恢复设置可见纹理。我希望这可以帮到你。
@Override
public void onPause() {
super.onPause();
mTextureView.setVisibility(View.GONE);
closeCamera();
closeBackgroundThread();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public void onResume() {
super.onResume();
mTextureView.setVisibility(View.VISIBLE);
openBackgroundThread();
if(mTextureView.isAvailable()) {
openCamera(mTextureView.getWidth(), mTextureView.getHeight());
} else {
mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
}
}