flutter - 颤振相机:清除流请求时出错:功能未实现
问题描述
我正在开发一个使用相机的颤振应用程序。我遵循了基本的颤振教程 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
解决方案
因此,我通过添加以下内容解决了该问题,这些内容未包含在我发布的链接中。
- 在 initState() 方法中,我必须手动添加观察者
WidgetsBinding.instance!.addObserver(this);
- 我必须定义/修改 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();
});
}
}
}
推荐阅读
- python - 我们如何访问嵌入在 ul 和 li 标签中的锚标签链接,以使用 selenium 和 python 打开与该标签关联的链接
- javascript - PHP(SQL) Array Passing to JS using ajax
- javascript - React + d3 工具提示与图例重叠
- c - StmCubeIDE 调试 STM32F411CEU6 的问题
- laravel - 使用 Laravel Cashier 获取 Stripe 即将到来的发票行项目
- spring-boot - 在 ElasticSearch 中不使用脚本追加字符串
- ssh - proxycommand 似乎不适用于 ansible 和我的环境
- javascript - 当我们使用服务工作者时,如何在每次刷新时停止增加缓存内存
- svg - 如何使用 svgwrite 嵌入/使用 ICC 颜色配置文件?
- node.js - node-cron 时区仅在时区与机器时区相同时工作