Open bingoogolapple opened 7 years ago
public class PermissionUtil {
/**
* 跳转到权限设置界面的请求码
*/
public static final int RC_PERMISSION_SETTINGS_SCREEN = 1025;
/**
* 访问外部存储权限
*/
public static final int RC_PERMISSION_STORAGE = 1026;
/**
* 打电话权限
*/
public static final int RC_PERMISSION_CALL_PHONE = 1027;
/**
* 定位权限
*/
public static final int RC_PERMISSION_LOCATION = 1028;
/**
* 拍照权限
*/
public static final int RC_PERMISSION_CAMERA = 1029;
private static final int NO_COMMON_PERMISSION_SETTING_DIALOG_CONTENT_RES_ID = -1;
private PermissionUtil() {
}
/**
* 某些权限被拒绝
*
* @param activity
* @param requestCode
* @param perms
*/
public static void onPermissionsDenied(MvcActivity activity, int requestCode, List<String> perms) {
int contentResId = getCommonPermissionSettingDialogContentResId(requestCode);
if (contentResId != NO_COMMON_PERMISSION_SETTING_DIALOG_CONTENT_RES_ID) {
showOpenPermissionSettingsScreenDialog(activity, requestCode, contentResId);
} else {
activity.onSomePermissionPermanentlyDenied(requestCode);
}
// if (EasyPermissions.somePermissionPermanentlyDenied(activity, perms)) {
// // 某些权限被永久拒绝
// int contentResId = getCommonPermissionSettingDialogContentResId(requestCode);
// if (contentResId != NO_COMMON_PERMISSION_SETTING_DIALOG_CONTENT_RES_ID) {
// showOpenPermissionSettingsScreenDialog(activity, requestCode, contentResId);
// } else {
// activity.onSomePermissionPermanentlyDenied(requestCode);
// }
// } else {
// // 某些权限被暂时拒绝
// if (isNotHandleCommonPermissionsDenied(requestCode, activity)) {
// activity.onPermissionsDenied(requestCode);
// }
// }
}
/**
* 显示打开权限设置界面的对话框
*
* @param activity MvcActivity
* @param requestCode 权限请求码
* @param contentResId 对话框提示内容
*/
public static void showOpenPermissionSettingsScreenDialog(MvcActivity activity, int requestCode, @StringRes int contentResId) {
new AppSettingsDialog.Builder(activity, activity.getString(contentResId, AppManager.getAppName()))
.setTitle(activity.getString(R.string.permission_settings_title))
.setPositiveButton(activity.getString(R.string.permission_settings_confirm))
.setNegativeButton(activity.getString(R.string.permission_settings_cancel), (dialog, which) -> {
if (isNotHandleCommonPermissionsDenied(requestCode, activity)) {
activity.onClickCancelOpenPermissionsSettingsScreen(requestCode);
}
})
.setRequestCode(RC_PERMISSION_SETTINGS_SCREEN)
.build()
.show();
}
/**
* 某些权限被拒绝
*
* @param fragment
* @param requestCode
* @param perms
*/
public static void onPermissionsDenied(MvcFragment fragment, int requestCode, List<String> perms) {
int contentResId = getCommonPermissionSettingDialogContentResId(requestCode);
if (contentResId != NO_COMMON_PERMISSION_SETTING_DIALOG_CONTENT_RES_ID) {
showOpenPermissionSettingsScreenDialog(fragment, requestCode, contentResId);
} else {
fragment.onSomePermissionPermanentlyDenied(requestCode);
}
// if (EasyPermissions.somePermissionPermanentlyDenied(fragment, perms)) {
// // 某些权限被永久拒绝
// int contentResId = getCommonPermissionSettingDialogContentResId(requestCode);
// if (contentResId != NO_COMMON_PERMISSION_SETTING_DIALOG_CONTENT_RES_ID) {
// showOpenPermissionSettingsScreenDialog(fragment, requestCode, contentResId);
// } else {
// fragment.onSomePermissionPermanentlyDenied(requestCode);
// }
// } else {
// // 某些权限被暂时拒绝
// if (isNotHandleCommonPermissionsDenied(requestCode, fragment)) {
// fragment.onPermissionsDenied(requestCode);
// }
// }
}
/**
* 显示打开权限设置界面的对话框
*
* @param fragment RxFragment
* @param requestCode 权限请求码
* @param contentResId 对话框提示内容
*/
public static void showOpenPermissionSettingsScreenDialog(MvcFragment fragment, int requestCode, @StringRes int contentResId) {
new AppSettingsDialog.Builder(fragment, fragment.getString(contentResId, AppManager.getAppName()))
.setTitle(fragment.getString(R.string.permission_settings_title))
.setPositiveButton(fragment.getString(R.string.permission_settings_confirm))
.setNegativeButton(fragment.getString(R.string.permission_settings_cancel), (dialog, which) -> {
if (isNotHandleCommonPermissionsDenied(requestCode, fragment)) {
fragment.onClickCancelOpenPermissionsSettingsScreen(requestCode);
}
})
.setRequestCode(RC_PERMISSION_SETTINGS_SCREEN)
.build()
.show();
}
/**
* 获取公共的打开权限设置界面对话框的提示内容资源id
*
* @param requestCode
* @return
*/
private static int getCommonPermissionSettingDialogContentResId(int requestCode) {
int contentResId = NO_COMMON_PERMISSION_SETTING_DIALOG_CONTENT_RES_ID;
if (requestCode == RC_PERMISSION_STORAGE) {
contentResId = R.string.permission_settings_content_storage;
} else if (requestCode == RC_PERMISSION_CAMERA) {
contentResId = R.string.permission_settings_content_camera;
} else if (requestCode == RC_PERMISSION_CALL_PHONE) {
contentResId = R.string.permission_settings_content_call_phone;
} else if (requestCode == RC_PERMISSION_LOCATION) {
contentResId = R.string.permission_settings_content_location;
}
return contentResId;
}
/**
* 是否没有处理公共的权限被拒绝
*
* @param requestCode
* @param lifecycleProvider
* @return
*/
private static boolean isNotHandleCommonPermissionsDenied(int requestCode, LifecycleProvider lifecycleProvider) {
boolean isNotHandled = false;
String appName = AppManager.getAppName();
if (requestCode == RC_PERMISSION_STORAGE) {
ToastUtil.show(AppManager.getApp().getString(R.string.tip_permission_storage_denied, appName));
RxUtil.runInUIThreadDelay(1500, lifecycleProvider).subscribe(aVoid -> AppManager.getInstance().exit());
} else if (requestCode == RC_PERMISSION_CAMERA) {
ToastUtil.show(AppManager.getApp().getString(R.string.tip_permission_camera_denied, appName));
} else if (requestCode == RC_PERMISSION_CALL_PHONE) {
ToastUtil.show(AppManager.getApp().getString(R.string.tip_permission_call_phone_denied, appName));
} else if (requestCode == RC_PERMISSION_LOCATION) {
ToastUtil.show(AppManager.getApp().getString(R.string.tip_permission_location_denied, appName));
} else {
isNotHandled = true;
}
return isNotHandled;
}
public interface Delegate {
void onClickCancelOpenPermissionsSettingsScreen(int requestCode);
void onPermissionsDenied(int requestCode);
void onSomePermissionPermanentlyDenied(int requestCode);
}
}
things-you-need-to-know-about-android-m-permission-developer-edition normal-dangerous
If any permission in a Permission Group is granted. Another permission in the same group will be automatically granted as well. In this case, once WRITE_CONTACTS is granted, application will also grant READ_CONTACTS and GET_ACCOUNTS.