在Android Studio开发的应用中执行adb命令报权限错误如何修改代码
问题根因
你当前的报错是两个错误叠加导致的:
- 首先
adb是运行在电脑端的Android调试工具,Android手机本机的运行环境中根本不存在adb可执行程序,你在APP进程里调用adb命令本身就是完全错误的用法 - 即便你要执行shell命令,普通应用进程也默认没有权限执行修改系统配置的高优先级命令
最优修复方案(推荐)
不要用执行shell命令的方式修改系统配置,直接调用Android官方提供的Settings系统API即可,步骤如下:
1. 声明权限
在AndroidManifest.xml中添加修改系统设置的权限声明:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
这个权限是特殊级别的敏感权限,仅在清单声明无效,需要用户手动授权开启。
2. 修改点击事件代码
替换原有的执行adb命令的逻辑,改为调用系统API:
muteButton.setOnClickListener { // 先判断是否已经获取修改系统设置的权限 if (!Settings.System.canWrite(this@MainActivity)) { // 无权限则跳转至系统设置页引导用户授权 val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS) intent.data = Uri.parse("package:$packageName") startActivity(intent) return@setOnClickListener } // 有权限直接修改配置项 try { Settings.System.putInt( contentResolver, "csc_pref_camera_forced_shuttersound_key", 0 ) // 可自行添加修改成功的提示逻辑 } catch (e: Exception) { // 捕获异常,处理部分机型不支持这个配置项的情况 e.printStackTrace() } }
其他说明
csc_pref_camera_forced_shuttersound_key是三星等部分厂商定制ROM才有的配置项,原生Android系统没有这个配置,该方案仅在对应厂商机型上生效- 部分地区有强制相机快门音的法规要求,即便修改配置也可能无法关闭快门音
- 如果你非要用执行shell命令的方式实现(兼容性差,不推荐),也需要去掉
adb shell前缀,直接写Runtime.getRuntime().exec("settings put system csc_pref_camera_forced_shuttersound_key 0"),但该方式同样需要申请WRITE_SETTINGS权限,稳定性远低于直接调用系统API
内容的提问来源于stack exchange,提问作者Mingyu Kim
相关产品推荐
相关产品推荐

