在有时候,需要用到WRITE_SETTINGS的权限,但是这个权限,在高版本手机里只在清单文件里声明也没用,动态申请也没用。
就需要打开系统权限列表,
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.System.canWrite(MainActivity.this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,
Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 200);
} else {
// 如果有权限做些什么
}
}
这样就会打开 修改系统权限的页面,如下图:
image.png
当然这个权限必须在清单文件声明,当你声明为:
清单文件会有红色波浪线,提示:Permission is only granted to system apps
image.png
当你改成
你会发现,允许修改系统权限 不能修改了,只有写成
才可以修改。
总之,简而言之,就是清单文件里声明权限:
再讲最上面的代码写上就能跳转并开启权限了。如果出现不能修改权限,请检查你的清单文件的权限是否标明,以及是否写成了uses-permission。
以后发现原因了,再追加。
在这里,Write_setting有个坑,申请了write_setting权限后,也出现闪退的情况,异常为:Java.lang.IllegalArgumentException: You cannot keep your settings in the secure settings.
在android 6.0及以后,WRITE_SETTINGS权限的保护等级已经由原来的dangerous升级为signature,这意味着我们的APP需要用系统签名或者成为系统预装软件才能够申请此权限,并且还需要提示用户跳转到修改系统的设置界面去授予此权限
也就是说,要想申请该权限,apk必须要打包,签名打包。要签名打包,最喜欢的debug模式是不能申请该权限