Android - CameraDevice был уже закрыт

Я так долго пытался интегрировать API Camera2 в мое приложение. Когда я переключаюсь из портретного режима в ландшафт, он выдает исключение

    java.lang.IllegalStateException: CameraDevice was already closed
at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:1984)
at android.hardware.camera2.impl.CameraDeviceImpl.submitCaptureRequest(CameraDeviceImpl.java:825)
at android.hardware.camera2.impl.CameraDeviceImpl.setRepeatingRequest(CameraDeviceImpl.java:880)
at android.hardware.camera2.impl.CameraCaptureSessionImpl.setRepeatingRequest(CameraCaptureSessionImpl.java:231)
at com.essentialsln.memtalk.ui.fragments.Camera2Fragment$11.onConfigured(Camera2Fragment.java:795)
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)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.os.HandlerThread.run(HandlerThread.java:61)

2 ответа

Я столкнулся с подобной проблемой, и это мне помогло. Если вы ссылались на пример приложения, вам следует остановить поток в своем CameraDevice.StateCallback, переопределив метод onClosed(CameraDevice):

 mCameraDevice.createCaptureSession(outputSurfaces,
                new CameraCaptureSession.StateCallback() {

                    @Override
                    public void onClosed(@NonNull CameraCaptureSession session) {
                        super.onClosed(session);
                        stopBackgroundThread();
                    } 

В моем случае этой ошибке предшествовало

      2020-12-15 18:31:55.703 5079-5079/com.android.example.camera2.video W/CameraDevice-JV-0: Stream configuration failed due to: createStream:1008: Camera 0: Surface already has a stream created for it (ID 0)
2020-12-15 18:31:55.704 5079-5079/com.android.example.camera2.video E/CameraCaptureSession: Session 0: Failed to create capture session; configuration failed

Проблема заключалась в том, что я добавлял поверхности в список и добавлял их в качестве цели, но не очищал их. я тоже был setRepeatingRequestв updateRepeatingRequestдо override fun onConfigured(s: CameraCaptureSession) {

Очистка поверхностей в initializeCamera()и удаление дополнительного updateRepeatingRequest исправило это для меня.

Другие вопросы по тегам