一、介绍
Google在Android6.0之后,将手机各项权限的使用规范做了修改,由原来的在Manifest.xml文件中添加各种我们需要用到的权限,改为不仅在Manifest.xml文件中添加,而且还要动态申请。
但并非所有权限都需要在代码中一一申请,因为Google将手机权限(Android6.0之后)Google分为了两个两个不同等级的大类,一类是Normal Permission,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等,
所有危险的 Android 系统权限都属于权限组。如果设备运行的是 Android 6.0(API 级别 23),并且应用的targetSdkVersion是 23 或更高版本时,如果应用请求其清单中列出的危险权限,而应用目前在权限组中没有任何权限,则系统会向用户显示一个对话框,描述应用要访问的权限组。对话框不描述该组内的具体权限;如果应用请求其清单中列出的危险权限,而应用在同一权限组中已有另一项危险权限,则系统会立即授予该权限,而无需与用户进行任何交互。
下面是详细分类:
1、Normal Permission
ACCESS_LOCATION_EXTRA_COMMANDS
2、Dangerous Permission(权限组->权限)
二、使用
在Android系统6.0版本中使用危险权限时(当然6.0以下正常在Manifest.xml文件中使用),需要检查该权限是否被用户授权,如果没有,申请;如果已经授权,则可以直接使用。基本的权限使用步骤如下:
1、在清单文件Manifest.xml中添加所有使用到的权限
<uses-permissionandroid:name="android.permission.INTERNET"/>
2、检查是否被用户授权
ContextCompat.checkSelfPermission(Context context, String permission);
//checkSelfPermission方法中有两个参数,分别是上下文,以及所申请的权限。
3、没有被用户授权时,申请权限
public static void requestPermissions(final Activity activity,final String[] permissions, final int requestCode) {}
//requestPermissions方法中需要三个参数,当前的activity,所申请的权限,可以是多个,
//最后就是请求码,既然有请求码说明它会有一个回调,也就是我们下面要讲的处理回调。
4、申请权限成功或者失败后的逻辑处理
申请权限成功或者失败后的逻辑处理处理:需要在Activity中重写onRequestPermissionsResult方法:
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSIONS_REQUEST_READ_CONTACTS: {//请求的权限
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 请求权限成功操作
} else {
//请求权限失败操作
}
return;
}
}
}