android 修改系统权限

在有时候,需要用到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模式是不能申请该权限

你可能感兴趣的:(android 修改系统权限)