我知道上面有很多有关异常的问题,但仍然找不到答案,决定自己问。
有时在使用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);
    }
}

10-06 03:23