android 6.0 添加权限问题

字数 357阅读 81

权限组(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);
}

推荐阅读更多精彩内容