在 onCreate 方法中调用它
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
checkForPermission();
}
将此代码放在 OnCreate 之外,然后根据您的需要修改此代码。这是有效且经过测试的代码
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public boolean checkForPermission() {
List<String> permissionsNeeded = new ArrayList<String>();
final List<String> permissionsList = new ArrayList<String>();
addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE);
addPermission(permissionsList,Manifest.permission.READ_PHONE_STATE);
addPermission(permissionsList,Manifest.permission.CALL_PHONE);
addPermission(permissionsList,Manifest.permission.RECORD_AUDIO);
addPermission(permissionsList,Manifest.permission.PROCESS_OUTGOING_CALLS);
addPermission(permissionsList,Manifest.permission.CAPTURE_AUDIO_OUTPUT);
addPermission(permissionsList,Manifest.permission.READ_SMS);
if (permissionsList.size() > 0) {
if (permissionsNeeded.size() > 0) {
// Need Rationale
ActivityCompat.requestPermissions(MainActivity.this, permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_PERMISSION);
return true;
}
ActivityCompat.requestPermissions(MainActivity.this, permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_PERMISSION);
return false;
}
return true;
}
private boolean addPermission(List<String> permissionsList, String permission) {
if (ContextCompat.checkSelfPermission(MainActivity.this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
// Check for Rationale Option
if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission))
return false;
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_PERMISSION: {
Map<String, Integer> perms = new HashMap<String, Integer>();
// Initial
perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_EXTERNAL_STORAGE,PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_SMS,PackageManager.PERMISSION_GRANTED);
// Fill with results
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
if (perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_EXTERNAL_STORAGE)==PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.READ_SMS)==PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "You can enjoy all features of app now", Toast.LENGTH_SHORT).show();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
checkForPermission();
}
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}