非系统Android应用无需ADB命令,如何程序化获取WRITE_SECURE_SETTINGS权限?
非系统应用获取WRITE_SECURE_SETTINGS权限的解决方案
你用requestPermissions方法无效的核心原因是:WRITE_SECURE_SETTINGS属于Android的特殊权限,不在危险权限范畴内,常规的权限申请流程完全不适用它,自然不会弹出权限请求弹窗。
针对非系统应用,不需要ADB的情况下,只能通过引导用户手动授权的方式获取该权限,具体步骤如下:
- 先在
AndroidManifest.xml中声明权限:
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
- 编写代码引导用户跳转到系统的应用权限设置页,让用户手动开启权限:
// Kotlin 示例 val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS) intent.data = Uri.parse("package:$packageName") startActivityForResult(intent, 1001)
// Java 示例 Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS); intent.setData(Uri.parse("package:" + getPackageName())); startActivityForResult(intent, 1001);
- 权限申请结果校验:
在onActivityResult中检查权限是否成功获取(如果使用AndroidX,推荐用Activity Result API替代startActivityForResult):
// Kotlin 示例 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == 1001) { if (Settings.System.canWrite(this)) { // 权限已获取,执行后续操作 } else { // 用户未授权,可提示用户开启权限 } } }
注意:非系统应用无法通过纯代码自动获取WRITE_SECURE_SETTINGS权限,必须经过用户手动在系统设置中开启,这是Android的权限限制机制决定的。
内容的提问来源于stack exchange,提问作者Sabena yasmin P
相关产品推荐
相关产品推荐

