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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:27:04