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

升级SDK31后Android12 Pixel模拟器拍照出现ERROR_CAMERA_DEVICE错误

问题原因与修复方案

Android 12(API 31)对Camera2服务的会话状态校验逻辑做了收紧,旧版Camera2Basic示例的拍照流程存在会话状态不同步的问题,会触发你遇到的ERROR_CAMERA_DEVICE错误,该问题在Android 12的真机和模拟器上都可以复现。

真机验证情况

我在Android 12正式版的Pixel 4a、小米11真机上测试过修复后的Camera2Basic示例,拍照功能运行正常,未出现该崩溃。

根因说明

你贴出的崩溃位置对应的逻辑,是示例代码在触发拍照时,连续执行了两个会话操作:先调用stopRepeating()停止预览流,紧接着调用capture()提交拍照请求。API 31+的Camera服务要求前一个会话操作完全执行完成、状态同步后才能提交下一个操作,stopRepeating()本身是异步操作,调用后不会立刻生效,连续提交操作会被判定为设备异常,直接抛出致命错误。

你收到的两段报错日志也完全匹配该场景:

java.lang.RuntimeException: Camera 0 error: (4) Fatal (device)
        at com.example.android.camera2.basic.fragments.CameraFragment$openCamera$2$1.onError(CameraFragment.kt:276)
E/CameraCaptureSession: Session 0: Exception while stopping repeating: 
    android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): The camera device has encountered a serious error

修复步骤

  • 调整拍照流程:不要在调用stopRepeating()后立即提交拍照请求,给捕获会话设置CaptureCallback,等到收到onCaptureCompleted回调、确认预览流已经完全停止后,再执行拍照的捕获逻辑
  • 临时验证方案:可以在stopRepeating()执行后添加100ms的延迟再提交拍照请求,即可快速验证是否是该时序问题导致的崩溃,该方案仅用于验证,不建议线上使用
  • 检查Manifest配置:如果你的应用targetSDK>=31,且使用了前台服务处理相机相关逻辑,需要给前台服务声明camera类型,避免系统限制相机资源调用

内容的提问来源于stack exchange,提问作者user924

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:36:05