Flutter Android:Android<33下ImageTextureEntry问题及相机异常求助
在Android 13以下设备解决multiple_image_camera拍摄崩溃问题
问题背景
我使用multiple_image_camera包实现多图连续拍摄功能(该包支持单次拍摄多张,区别于仅支持单张拍摄的image_picker),但在Android 13以下设备点击拍摄按钮时出现崩溃,Android 13及以上设备运行正常。崩溃核心错误日志如下:
android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): cancelRequest:507: Camera 0: Error clearing streaming request: Function not implemented (-38)
同时初始化阶段提示图像格式兼容问题:
W/Camera ( 5873): The selected imageFormatGroup is not supported by Android. Defaulting to yuv420
解决方案
1. 适配Camera2 API版本差异
崩溃根源是低版本Android(<13)的Camera2实现未完全支持cancelRequest接口,可通过两种方式处理:
- 修改包内源码:在停止预览会话的逻辑中添加版本判断,当
Build.VERSION.SDK_INT < 33时,跳过cancelRequest调用,改用abortCaptures()终止当前捕获请求,或直接重新创建CameraCaptureSession。 - 上层逻辑兼容:调用拍摄方法前手动暂停预览,拍摄完成后恢复预览,规避低版本不支持的会话清理逻辑。
2. 强制指定兼容图像格式
针对图像格式不兼容提示,初始化相机时强制指定低版本设备普遍支持的yuv420格式:
MultipleImageCamera( imageFormatGroup: ImageFormatGroup.yuv420, // 其他配置参数 )
3. 调整依赖或替换方案
- 检查multiple_image_camera包的更新记录,尝试升级/降级到有低版本修复的兼容版本。
- 若包本身兼容性无法解决,可基于image_picker自行实现连续拍摄:通过循环调用拍摄接口、缓存已拍图片的方式模拟多图拍摄,兼容性更稳定。
4. 添加异常捕获与相机恢复
在拍摄逻辑中添加异常捕获,出现CameraAccessException时自动重新初始化相机,避免功能完全不可用:
try { await _cameraController.captureImage(); } on CameraAccessException catch (_) { await _cameraController.initialize(); }
内容的提问来源于stack exchange,提问作者Mohit Marfatia
相关产品推荐
相关产品推荐

