我知道上面有很多有关异常的问题,但仍然找不到答案,决定自己问。
有时在使用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)
最佳答案
我面临着同样的问题,我通过隐藏纹理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);
}
}