使用运行时权限和权限组来请求所需的权限,避免请求不必要的权限。
示例代码:
// 检查是否具有所需权限(如读取联系人) if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // 如果没有权限,则请求权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS); }
// 处理权限请求结果 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == MY_PERMISSIONS_REQUEST_READ_CONTACTS) { // 如果请求读取联系人权限,则检查是否获得了该权限 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 执行读取联系人的操作 readContacts(); } else { // 没有权限,可以提醒用户开启权限或者执行其他操作 Toast.makeText(this, "没有读取联系人的权限", Toast.LENGTH_SHORT).show(); } } }
// 使用权限组请求多个权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission_group.CALENDAR) != PackageManager.PERMISSION_GRANTED) { // 如果没有权限,则请求权限 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR}, MY_PERMISSIONS_REQUEST_CALENDAR); }