调用putInt写入安卓系统设置触发IllegalArgumentException报错求解
错误根因
你遇到的java.lang.IllegalArgumentException: You cannot keep your settings in the secure settings报错,核心原因如下:
- 你尝试用putInt写入的
android.settings.CAMERA_COVER_STATUS、android.settings.MIC_SWITCH_STATUS属于Android系统私有保留的设置表字段,第三方应用默认没有写入权限 - 从Android 6.0开始,系统禁止普通第三方应用向Settings.System、Settings.Secure表写入非官方公开的自定义字段,也不允许修改私有系统保留字段,触发限制就会抛出该异常。
对应解决方案
- 如果你是ROM开发/持有系统签名:给应用申明
android.permission.WRITE_SECURE_SETTINGS权限,同时将应用加入system共享UID,即可正常写入该类系统私有字段 - 如果你是普通第三方应用开发:不要尝试修改系统设置表存储自定义状态,改用
SharedPreferences、本地数据库等自有存储方式保存摄像头、麦克风的开关状态;如果需要监听系统侧的摄像头、麦克风启用状态,直接调用官方公开的CameraManager.AvailabilityCallback、AudioManager相关API实现即可 - 如果你需要控制设备的摄像头、麦克风硬件开关:该能力仅对系统级应用开放,普通第三方应用无法获取对应权限,只有ROOT后的设备可以通过调用隐藏系统API实现该需求。
内容的提问来源于stack exchange,提问作者Naseef Chowdhury
相关产品推荐
相关产品推荐

