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

Android 11后台启动相机预览遇Camera_DISABLED策略错误求助

Android 11相机访问权限异常问题

问题现象

  • Android 10环境下运行正常,Android 11中触发相机访问故障
  • 全新安装并授权权限后初期可正常运行,一段时间后出现错误,相机预览无法显示
  • 错误日志:
android.hardware.camera2.CameraAccessException: CAMERA_DISABLED (1): connectHelper:1747: Camera "0" disabled by policy
    at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:1022)
    at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:550)

当前实现场景

通过广播接收器通知Service,由Service负责展示相机预览,应用清单内容如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.app.software">
    <queries>
        <package android:name="com.app.myservice" />
    </queries>

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera2.full" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"
        tools:ignore="ProtectedPermissions" />

    <application
        android:name=".Application"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApp">
        <receiver
            android:name=".service.BootCompletedReceiver"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>
        <receiver android:name=".service.MyAppNotificationReceiver">
            <intent-filter>
                <action android:name="com.app.software.CAM_PREVIEW" />
            </intent-filter>
        </receiver>

        <service
            android:name=".service.MyService"
            android:enabled="true"
            android:exported="true"
            android:foregroundServiceType="camera" />

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest> 

已排查内容

  • 确认设备无工作策略限制
  • 已在清单中声明START_ACTIVITIES_FROM_BACKGROUND权限,但问题未解决

问题解答

1. START_ACTIVITIES_FROM_BACKGROUND权限的使用条件

  • 这是系统级保护权限,普通第三方应用无法通过清单声明直接获取,tools:ignore="ProtectedPermissions"仅能让编译通过,实际运行时系统不会授予该权限
  • 只有系统应用、具备特殊签名的应用,或处于企业管理设备且被允许的场景下,才能获得该权限
  • Android 11+强制限制第三方应用在后台启动Activity,即使声明该权限也无法绕过此规则,目的是避免后台应用打扰用户

2. 无需切换到前台的相机预览替代方案

Android 11及以上对后台相机访问有严格管控,可行方案如下:

(1)规范使用前台服务

  • 你的Service已声明android:foregroundServiceType="camera",但必须在启动服务立即调用startForeground()展示明确的相机运行通知,不能延迟
  • 通知需清晰告知用户相机正在运行,这是Android 11+对相机前台服务的强制要求,否则系统会判定为后台违规访问并禁用相机
  • 示例代码(在Service的onStartCommand中):
// 创建相机运行状态的通知
Notification notification = new NotificationCompat.Builder(this, CAMERA_CHANNEL_ID)
        .setContentTitle("相机正在运行")
        .setSmallIcon(R.drawable.ic_camera)
        .setPriority(NotificationCompat.PRIORITY_LOW)
        .build();
// 启动前台服务
startForeground(CAMERA_NOTIFICATION_ID, notification);
// 之后再初始化相机资源

(2)使用画中画(PiP)模式

  • 将相机预览Activity切换到画中画模式,应用无需完全占据前台,仍可保持相机访问权限
  • 画中画模式是系统允许的合规场景,不会触发相机禁用策略,同时用户可并行操作其他应用

(3)检查相机资源释放逻辑

  • CAMERA_DISABLED错误也可能源于相机资源未正确释放,导致系统判定资源滥用
  • 确保在Service销毁、相机暂停时,调用cameraDevice.close()、cameraCaptureSession.close()等方法彻底释放资源,避免泄漏

额外注意事项

  • Android 11+中,即使是前台服务,若用户长时间未与应用交互,系统也可能自动回收相机权限
  • 禁止在广播接收器中直接初始化相机,广播接收器生命周期极短,应将相机逻辑放在前台服务中处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:50:36