权限组(Permission Group)
所有的权限都属于权限组当中,包括常规权限和危险权限。对于常规权限而言,用户并不需要进行手动赋予权限,而危险权限则相反,所以开发者只需要关注危险权限即可。
如果app是运行在android 6.0(API level 23)版本上并且app的targetSdkVersion必须是23或者更高。
如果一个app需要在Mainfest中请求一个危险权限,但是app当前在权限组中并没有任何相关的权限,系统则会弹出一个提示框来让用户自主选择是否赋予当前app相关权限来支持app的相关操作。比如,如果一个app请求读取联系人的权限(READ_CONTACTS),系统会弹出一个提示框询问用户是否为当前app提供读取联系人的权限,用户确认提供则app才会获得权限。
如果app在请求一个危险权限(A)的时候,app已经包含相同权限组中另一个危险权限了,那么系统会自动提供A的权限,相当于一个权限组中的其中一个权限被请求了通过了,其他权限不需要再次请求。
附危险权限组:
动态添加ACTION_MANAGE_WRITE_SETTINGS权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 判断是否有WRITE_SETTINGS权限
if(!Settings.System.canWrite(this)) {
// 申请WRITE_SETTINGS权限
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
} else {
dosomething();
}
} else {
dosomething();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intentdata) {
if (requestCode == REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 判断是否有WRITE_SETTINGS权限
if (Settings.System.canWrite(this)) {
dosomething();
}
}
}
super.onActivityResult(requestCode, resultCode, data);
}