首页 > 解决方案 > 颤振相机:清除流请求时出错:功能未实现

问题描述

我正在开发一个使用相机的颤振应用程序。我遵循了基本的颤振教程 https://flutter.dev/docs/cookbook/plugins/picture-using-camera

但是,当我在使用 CameraPreview 小部件的屏幕上并导航到另一个使用相机的应用程序(如 snapchat)时,我在打开 snapchat 时看到以下错误(错误来自我的应用程序),之前有没有其他人见过这个? 返回我的应用程序会显示相机处于冻结/暂停状态。

I/CameraManagerGlobal(30470): Camera 0 facing CAMERA_FACING_BACK state now CAMERA_STATE_IDLE for client com.my.cliet API Level 2
I/CameraManagerGlobal(30470): Camera 0 facing CAMERA_FACING_BACK state now CAMERA_STATE_CLOSED for client com.my.cliet API Level 2
E/CameraCaptureSession(30470): Session 0: Exception while stopping repeating: 
E/CameraCaptureSession(30470): android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): cancelRequest:547: Camera 0: Error clearing streaming request: Function not implemented (-38)
E/CameraCaptureSession(30470):  at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:1340)
E/CameraCaptureSession(30470):  at android.hardware.camera2.impl.ICameraDeviceUserWrapper.cancelRequest(ICameraDeviceUserWrapper.java:99)
E/CameraCaptureSession(30470):  at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:1259)
E/CameraCaptureSession(30470):  at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:578)
E/CameraCaptureSession(30470):  at android.hardware.camera2.impl.CameraCaptureSessionImpl$2.onDisconnected(CameraCaptureSessionImpl.java:789)
E/CameraCaptureSession(30470):  at android.hardware.camera2.impl.CameraDeviceImpl$7.run(CameraDeviceImpl.java:245)
E/CameraCaptureSession(30470):  at android.os.Handler.handleCallback(Handler.java:938)
E/CameraCaptureSession(30470):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/CameraCaptureSession(30470):  at android.os.Looper.loop(Looper.java:246)
E/CameraCaptureSession(30470):  at android.app.ActivityThread.main(ActivityThread.java:8506)
E/CameraCaptureSession(30470):  at java.lang.reflect.Method.invoke(Native Method)
E/CameraCaptureSession(30470):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
E/CameraCaptureSession(30470):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
E/CameraCaptureSession(30470): Caused by: android.os.ServiceSpecificException: cancelRequest:547: Camera 0: Error clearing streaming request: Function not implemented (-38) (code 10)
E/CameraCaptureSession(30470):  at android.os.Parcel.createExceptionOrNull(Parcel.java:2399)
E/CameraCaptureSession(30470):  at android.os.Parcel.createException(Parcel.java:2369)
E/CameraCaptureSession(30470):  at android.os.Parcel.readException(Parcel.java:2352)
E/CameraCaptureSession(30470):  at android.os.Parcel.readException(Parcel.java:2294)
E/CameraCaptureSession(30470):  at android.hardware.camera2.ICameraDeviceUser$Stub$Proxy.cancelRequest(ICameraDeviceUser.java:750)
E/CameraCaptureSession(30470):  at android.hardware.camera2.impl.ICameraDeviceUserWrapper.cancelRequest(ICameraDeviceUserWrapper.java:97)
E/CameraCaptureSession(30470):  ... 11 more

标签: flutterandroid-camera

解决方案


因此,我通过添加以下内容解决了该问题,这些内容未包含在我发布的链接中。

  1. 在 initState() 方法中,我必须手动添加观察者
WidgetsBinding.instance!.addObserver(this);
  1. 我必须定义/修改 didChangeAppLifecycleState(...) 函数如下
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    final CameraController? cameraController = _controller;

    // App state changed before we got the chance to initialize.
    if (cameraController == null || !cameraController.value.isInitialized) {
      return;
    }

    if (state == AppLifecycleState.inactive) {
      cameraController.dispose();
    } else if (state == AppLifecycleState.resumed) {
      this._controller = CameraController(
        widget.camera,
        ResolutionPreset.medium,
      );

      if (mounted) {
        setState(() {
          this._initializeControllerFuture = this._controller.initialize();
        });
      }
    }
  }

推荐阅读