【问题标题】:Flutter Camera Exception - CameraDevice was already closedFlutter Camera Exception - CameraDevice 已经关闭
【发布时间】:2023-02-04 03:37:56
【问题描述】:

我有一个 flutter 应用程序,它具有录制视频并使用 camera: ^0.10.0+4 将其保存到文件的功能。场景是用户在 VideoRecordPage 上完成录制后,他按下继续按钮,然后相机控制器将处理并导航到下一页(简单的 FormPage,它只包含一些输入字段,没有打开相机或预览图像)。页面导航成功,但是当用户开始在输入字段中输入时,应用程序突然崩溃并显示此错误

I/Camera  (25833): startPreview
I/Camera  (25833): close
4
I/flutter (25833): last state body port: false
I/Camera  (25833): close
E/AndroidRuntime(25833): FATAL EXCEPTION: CameraBackground
E/AndroidRuntime(25833): Process: id.test.app.dev, PID: 25833
E/AndroidRuntime(25833): java.lang.IllegalStateException: CameraDevice was already closed
E/AndroidRuntime(25833):    at android.hardware.camera2.impl.CameraDeviceImpl.checkIfCameraClosedOrInError(CameraDeviceImpl.java:2347)
E/AndroidRuntime(25833):    at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:684)
E/AndroidRuntime(25833):    at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:669)
E/AndroidRuntime(25833):    at io.flutter.plugins.camera.Camera$DefaultCameraDeviceWrapper.createCaptureSession(Camera.java:175)
E/AndroidRuntime(25833):    at io.flutter.plugins.camera.Camera.createCaptureSessionWithSessionConfig(Camera.java:479)
E/AndroidRuntime(25833):    at io.flutter.plugins.camera.Camera.createCaptureSession(Camera.java:465)
E/AndroidRuntime(25833):    at io.flutter.plugins.camera.Camera.createCaptureSession(Camera.java:387)
E/AndroidRuntime(25833):    at io.flutter.plugins.camera.Camera.startPreview(Camera.java:1071)
E/AndroidRuntime(25833):    at io.flutter.plugins.camera.Camera$1.onOpened(Camera.java:322)
E/AndroidRuntime(25833):    at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:165)
E/AndroidRuntime(25833):    at android.os.Handler.handleCallback(Handler.java:938)
E/AndroidRuntime(25833):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(25833):    at android.os.Looper.loopOnce(Looper.java:201)
E/AndroidRuntime(25833):    at android.os.Looper.loop(Looper.java:288)
E/AndroidRuntime(25833):    at android.os.HandlerThread.run(HandlerThread.java:67)

【问题讨论】:

    标签: android flutter android-camera flutter-dependencies


    【解决方案1】:

    在我的例子中,解决这个问题的方法是不在 initState 方法中初始化相机控制器。如果您按照相机包 (camera: ^0.10.3) 中的示例进行操作,您将看到相机控制器实际上是在 onNewCameraSelected 方法中初始化的。基本上确保不要两次初始化相机控制器,这应该可以解决您的问题。

    一些提示:

    1. 确保您的相机类具有“with WidgetsBindingObserver”
    2. 在您的 initState 方法中添加这行代码:WidgetsBinding.instance.addObserver(this);
    3. 在您的 dispose 方法中添加这行代码:WidgetsBinding.instance.removeObserver(this);
    4. 还要确保在处理方法中处理相机控制器:controller?.dispose();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2016-06-26
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      相关资源
      最近更新 更多