在AndroidManifest.xml文件中添加以下代码来请求多个权限:
private final int MY_PERMISSIONS_REQUEST_MULTIPLE = 123;
private void requestMultiplePermissions() {
String[] permissions = {
Manifest.permission.READ_CONTACTS,
Manifest.permission.WRITE_CONTACTS,
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION
};
ArrayList permissionList = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(permission);
}
}
if (!permissionList.isEmpty()) {
ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), MY_PERMISSIONS_REQUEST_MULTIPLE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_MULTIPLE: {
Map perms = new HashMap<>();
// Initial
for (String permission : permissions) {
perms.put(permission, PackageManager.PERMISSION_GRANTED);
}
// Fill with results
for (int i = 0; i < grantResults.length; i++) {
perms.put(permissions[i], grantResults[i]);
}
// Check for all permissions
boolean allGranted = true;
for (String permission : permissions) {
if (perms.get(permission) != PackageManager.PERMISSION_GRANTED) {
allGranted = false;
break;
}
}
if (allGranted) {
// All permissions granted
} else {
// Permission denied
}
}
break;
}
}
在需要多个权限的位置调用requestMultiplePermissions()
方法即可。在用户请求完所有权限后,onRequestPermissionsResult()
方法将被调用。处理所有权限是否被授予的逻辑。