You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:36:09