Android 14及以上如何申请MANAGE_DEVICE_POLICY_CAMERA权限以禁用相机
Android 14 相机禁用权限申请与功能实现
核心说明
MANAGE_DEVICE_POLICY_CAMERA 并非普通应用权限,它仅对**设备所有者(Device Owner)或工作资料配置文件所有者(Profile Owner)**开放。普通应用通过常规requestPermissions()流程申请会直接被系统拒绝,这是Android 14强化系统权限管控的结果。
正确实现步骤
1. 将应用注册为设备所有者/配置文件所有者
这是获取该权限的前提,可通过以下方式完成:
- ADB测试命令:
连接设备后执行(需确保设备无已设置的所有者,且应用未被卸载过):dpm set-device-owner com.your.package/.YourDeviceAdminReceiver - 企业MDM部署:
通过Google Play EMM或企业移动管理平台,将应用推送到设备并设置为所有者,这是商用设备的正式部署途径。 - NFC触碰配置:
制作含配置信息的NFC标签,触碰设备完成应用的所有者注册,适用于现场批量配置。
2. 配置Manifest与权限文件
在AndroidManifest.xml中添加以下内容:
- 声明必要权限:
<uses-permission android:name="android.permission.MANAGE_DEVICE_POLICY_CAMERA" /> <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" /> - 注册设备管理员Receiver:
<receiver android:name=".YourDeviceAdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin_config" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> - 创建
res/xml/device_admin_config.xml,声明相机管控权限:<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <camera-disabling /> </uses-policies> </device-admin>
3. 编写相机禁用逻辑
应用成为所有者后,通过DevicePolicyManager操作相机状态:
val dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager val adminComponent = ComponentName(this, YourDeviceAdminReceiver::class.java) // 验证权限状态 if (dpm.isDeviceOwnerApp(packageName)) { // 禁用相机 dpm.setCameraDisabled(adminComponent, true) // 恢复相机可执行:dpm.setCameraDisabled(adminComponent, false) }
重要提醒
- 普通消费者设备无法通过常规渠道将应用设为设备所有者,该功能仅面向企业管理类应用。
- Android 14的权限调整是为了强化用户隐私保护,确保只有授权的管理应用能修改系统级硬件控制权限。
内容的提问来源于stack exchange,提问作者Mohamed Afreedi
相关产品推荐
相关产品推荐

