Android 12新机型(如S22 Ultra)后台Camera2录制失效求助
三星S22 Ultra等新Android12机型后台相机录制异常原因及分析
你的实现在多数Android12设备正常,但三星S22 Ultra这类机型后台触发CameraDevice.StateCallback#ERROR_CAMERA_DEVICE,核心是三星One UI 4.x(适配Android12)的私有管控规则,和以下几个关键变化有关:
1. 后台相机的UI关联检测收紧
三星在One UI 4.0及后续版本中,新增了后台相机会话的UI绑定检测:
- 当应用进入后台后,系统会检查相机CaptureRequest的Target列表中是否曾关联过UI类Surface(比如SurfaceView的Surface)
- 你的代码中前台会添加SurfaceView的Surface,后台仅跳过添加但未重新配置相机会话,系统会判定相机仍和已失效的UI组件关联,直接强制关闭相机设备
- 三星S10的One UI版本更早,尚未加入该限制,所以后台录制正常
2. Persistent Surface的后台使用限制
你用到的MediaCodec.createPersistentInputSurface()在三星新机型上有兼容性差异:
- 原生Android12允许后台使用Persistent Surface录制,但三星要求后台相机会话只能绑定纯录制用途的Surface,不能有任何前台UI Surface的配置残留
- 你的相机会话在前后台共用同一套配置逻辑,后台时虽未添加UI Surface,但会话的历史配置记录被系统识别,触发权限拦截
3. 后台相机会话的生命周期校验增强
三星新机型对后台相机的可用性检测更严格:
- 应用后台后,SurfaceView的Surface会被销毁(holder变为null),系统会检查相机会话关联的所有Surface是否处于活跃状态
- 由于之前的会话曾绑定过已失效的UI Surface,系统判定会话无效,抛出
ERROR_CAMERA_DEVICE错误关闭相机
可行的修复方向
- 后台重新初始化相机会话:应用切换到后台时,销毁当前相机会话,重新创建仅绑定
recorderSurface的CaptureRequest,彻底清除UI Surface的关联记录 - 拆分前后台相机配置:不要在同一相机会话中动态添加/移除UI Surface,分别为前台(带SurfaceView)和后台(仅录制Surface)创建独立的相机配置流程
- 确认后台权限:检查三星机型的应用权限设置,确保开启了“允许后台活动”权限,部分三星机型中该权限和后台相机访问联动
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

