1 private static final int MY_PERMISSIONS_REQUEST_READ_CONTACTS= 0;
2
3 //检查目前是否有权限
4 if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
5 != PackageManager.PERMISSION_GRANTED) {
6
7 if (shouldShowRequestPermissionRationale(
8 Manifest.permission.READ_CONTACTS)) {
9 // 这里写一些向用户解释为什么我们需要读取联系人的提示得代码
10 }
11
12 //请求权限,系统会显示一个获取权限的提示对话框,当前应用不能配置和修改这个对话框
13 requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
14 MY_PERMISSIONS_REQUEST_READ_CONTACTS);
15
16 return;
17 }
下面代码处理用户响应
1 @Override
2 public void onRequestPermissionsResult(int requestCode,
3 String permissions[], int[] grantResults) {
4 switch (requestCode) {
5 case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
6 if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
7 // 授权成功
8
9 } else {
10 // 授权失败
11
12 }
13 return;
14 }
15
16 }
17 }
shouldShowRequestPermissionRationale() 方法说明
1. 第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale() 返回 true,应该显示一些为什么需要这个权限的说明
2.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale() 返回 false
3. 设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale() 返回 false