android6.0以后,添加了动态权限管理,在某些情况下,用户在弹出权限选择框时选中了永久禁止,下回使用时就不会再弹出选择框了,这种情况下,某些功能必须要有指定的权限才能正常使用,更有可能会导致崩溃,小编这边针对这个问题总结了一个方法,给予提示。
public static boolean checkPermission(String permission) {
Log.e("perssion",permission);
String message = "";
if (permission.equals("android.permission.RECORD_AUDIO")) {
message = "程序无法正常运行,缺少录音权限:";
} else if (permission.equals("android.permission.CAMERA")) {
message = "程序无法正常运行,缺少拍照权限:";
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.e("checkSelfPermission", ContextCompat.checkSelfPermission(mActivity, permission) + "");
if (ContextCompat.checkSelfPermission(mActivity, permission) != PackageManager.PERMISSION_GRANTED) {
if (mActivity.shouldShowRequestPermissionRationale(permission)) {
ActivityCompat.requestPermissions(mActivity,
new String[]{permission},
2);
} else
new AlertDialog.Builder(mActivity)
.setTitle("提示:")
.setMessage(message)
.setPositiveButton("去设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
try { // MIUI 8
Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
localIntent.putExtra("extra_pkgname", mActivity.getPackageName());
mActivity.startActivity(localIntent);
} catch (Exception e) {
try { // MIUI 5/6/7
Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");
localIntent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
localIntent.putExtra("extra_pkgname", mActivity.getPackageName());
mActivity.startActivity(localIntent);
} catch (Exception e1) { // 否则跳转到应用详情
mActivity.startActivity(getAppDetailSettingIntent());
}
}
dialogInterface.cancel();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// settingService.cancel();
dialogInterface.cancel();
}
})
.create()
.show();
return false;
} else {
return true;
}
} else {
return true;
}
}
/**
* 获取应用详情页面intent(如果找不到要跳转的界面,也可以先把用户引导到系统设置页面)
*
* @return
*/
private static Intent getAppDetailSettingIntent() {
Intent localIntent = new Intent();
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (Build.VERSION.SDK_INT >= 9) {
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
localIntent.setData(Uri.fromParts("package", mActivity.getPackageName(), null));
} else if (Build.VERSION.SDK_INT <= 8) {
localIntent.setAction(Intent.ACTION_VIEW);
localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
localIntent.putExtra("com.android.settings.ApplicationPkgName", mActivity.getPackageName());
}
return localIntent;
}
代码可以直接使用,这边只判断了录音和相机权限,如果是申请其它权限,可自行添加