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