Android平台ERROR_CAMERA_DISABLED错误的解决方法咨询
解决锁屏后触发ERROR_CAMERA_DISABLED的方案
错误码3对应的ERROR_CAMERA_DISABLED,本质是系统在锁屏后限制了后台相机资源的访问,强行持有相机资源会触发该错误。以下是具体解决方法:
监听屏幕状态,主动释放/重建相机资源
锁屏时系统会优先回收后台非必要资源,此时主动释放相机相关资源,解锁后再重新初始化,是最直接的解决方式:- 结合生命周期监听屏幕状态变化,在锁屏(对应Activity的
onPause)时释放资源,解锁(对应onResume)时重建相机:class CameraLifecycleObserver(private val cameraManager: CameraManager) : DefaultLifecycleObserver { private var cameraDevice: CameraDevice? = null private var captureSession: CameraCaptureSession? = null private var imageReader: ImageReader? = null override fun onPause(owner: LifecycleOwner) { super.onPause(owner) // 释放所有相机相关资源 captureSession?.close() cameraDevice?.close() imageReader?.close() captureSession = null cameraDevice = null imageReader = null } override fun onResume(owner: LifecycleOwner) { super.onResume(owner) // 重新初始化相机流程 openCamera() } private fun openCamera() { // 执行你原本的打开相机、创建CaptureSession、发起setRepeatingRequest的逻辑 } } - 在Activity/Fragment中绑定观察者:
lifecycle.addObserver(CameraLifecycleObserver(cameraManager))
- 结合生命周期监听屏幕状态变化,在锁屏(对应Activity的
适配Android版本的相机权限要求
- Android 12(API 31)及以上,后台持续使用相机需要额外申请
android.permission.CAMERA_BACKGROUND权限,且需用户手动授权;如果你的应用不需要后台相机功能,锁屏时释放资源即可,无需申请该权限。 - 确保Manifest中已声明基础相机权限:
<uses-permission android:name="android.permission.CAMERA" /> <!-- Android 12+ 后台相机权限(按需添加) --> <uses-permission android:name="android.permission.CAMERA_BACKGROUND" />
- Android 12(API 31)及以上,后台持续使用相机需要额外申请
完善相机资源的回收逻辑
不要依赖finalize方法(该方法已废弃且不可靠),要在明确的回调节点主动释放资源:- 在
CameraDevice.StateCallback的onDisconnected和onError回调中统一执行清理:override fun onDisconnected(camera: CameraDevice) { camera.close() cameraDevice = null // 标记相机需要重新初始化 } override fun onError(camera: CameraDevice, error: Int) { camera.close() cameraDevice = null if (error == CameraDevice.ERROR_CAMERA_DISABLED) { // 锁屏触发的错误,无需崩溃处理,等待解锁后重建即可 } } - 处理
ImageReader的图片时,及时调用image.close(),避免资源堆积。
- 在
避免后台持续持有相机
锁屏后应用进入后台,系统会严格限制相机这类敏感资源的使用,强行维持setRepeatingRequest会触发系统的资源限制机制,导致错误。因此锁屏时必须停止重复请求并释放相机。
内容的提问来源于stack exchange,提问作者Gabriel Santos
相关产品推荐
相关产品推荐

