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

使用Android Camera2同时预览双后置摄像头报ERROR_MAX_CAMERAS_IN_USE错误

错误原因

ERROR_MAX_CAMERAS_IN_USE 错误触发有两个核心场景:

  1. 硬件与系统版本不支持:Android 10(API 29)才首次官方支持多摄像头同时打开,Android 11(API 30)新增了可同时打开的摄像头组合查询接口。大多数中低端机型即便系统版本达标,也仅支持「前置+任意后置」的组合同时打开,不支持两个后置摄像头同时工作。你目前可以正常打开前置+单个后置,符合这类设备的特性。
  2. 代码逻辑存在缺陷:
    • 全局共用imageDimension变量,打开第二个摄像头时会覆盖第一个摄像头的输出尺寸配置,导致第一个摄像头的预览会话异常占用底层资源,触发上限报错
    • 两个摄像头同时触发打开请求,并发操作容易和相机底层调度逻辑冲突,导致第二个摄像头申请资源失败
    • 打开摄像头时未指定后台Handler,主线程阻塞可能导致摄像头打开超时,被底层判定为占用

修复方案

  • 先验证设备支持性:API >=30 时通过CameraManager.getConcurrentCameraIds()查询设备支持的可同时打开的摄像头组合,如果返回的列表中不包含你需要的两个后置ID组合,说明硬件本身不支持该操作,直接提示用户即可。
  • 修改全局尺寸变量:把原本的全局Size imageDimension改成Size[] imageDimensions = new Size[2];,每个摄像头打开时单独存储自己的输出尺寸,不要共用变量。
  • 调整为串行打开逻辑:不要同时触发两个摄像头的打开请求,等第一个摄像头的updatePreview执行完成、预览正常运行之后,再触发第二个摄像头的打开操作。
  • 指定摄像头回调的运行线程:把manager.openCamera方法的第三个参数从null改为对应摄像头的后台Handler mBackgroundHandlers[cameraID],避免主线程阻塞导致的打开异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:36:00