android应用权限检测工具类
2018-04-02 18:19
375 查看
public class PermissionUtil { public static final int REQUEST_PERMISSION = 0x001; //app需要的全部危险权限在这里定义 public static final String[] ALL_PERMISSIONS = new String[]{ Manifest.permission.READ_CONTACTS, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; private PermissionUtil() { } /** * Gets permissions. * * @return the permissions */ public static String[] getPermissions() { return getPermissions(Utils.getApp().getPackageName()); } /** * 检测权限 * * @param activity 上下文 * @return 是否需要申请权限 */ public static boolean checkPermission(Activity activity) { return checkPermission(activity, ALL_PERMISSIONS); } /** * 检测权限 * * @param activity 上下文 * @return 是否需要申请权限 true:不需 4000 要 */ public static boolean checkPermission(Activity activity, String... permissions) { return SDK_INT < Build.VERSION_CODES.M || checkPermissionAllGranted(permissions); } /** * 在fragment 检测权限 * * @param fragment 上下文 * @return 是否需要申请权限 */ public static boolean checkPermission(Fragment fragment) { return checkPermission(fragment, ALL_PERMISSIONS); } /** * 在fragment 检测权限 * * @param fragment 上下文 * @return 是否需要申请权限 */ public static boolean checkPermission(Fragment fragment, String... permissions) { return SDK_INT < Build.VERSION_CODES.M || checkPermissionAllGranted(permissions); } /** * 判断是否具有危险权限,是否获得此权限授权 * * @param permissions 危险权限组 * @return 是否具有全部权限 */ private static boolean checkPermissionAllGranted(String... permissions) { for (String permission : permissions) { if (ActivityCompat.checkSelfPermission(Utils.getApp(), permission) != PackageManager.PERMISSION_GRANTED) { // 只要有一个权限没有被授予, 则直接返回 false return false; } } return true; } public static void requestPermission(Activity activity, String[] permissions, int requestCode) { ActivityCompat.requestPermissions(activity, permissions, requestCode); } /** * 打开 APP 的详情设置 */ public static void openAppDetails(final Activity context, String message) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage(message); builder.setPositiveButton("去手动授权", (dialog, which) -> { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" + context.getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); context.startActivity(intent); }); builder.setNegativeButton("取消", (dialog, which) -> checkPermission(context)); builder.setNeutralButton("退出软件", (dialog, which) -> context.finish()); builder.show(); } /** * 获取应用清单列表权限 * * @param packageName 应用包名 * @return 应用清单列表权限 permissions */ public static String[] getPermissions(final String packageName) { PackageManager manager = Utils.getApp().getPackageManager(); try { return manager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS) .requestedPermissions; } catch (PackageManager.NameNotFoundException e) { return new String[]{}; } } /** * Should show rationale boolean. * * @param activity the activity * @param permission the permission * @return true:用户获取权限被拒绝;false:用户获取权限被拒绝并且选择"不再询问" */ public static boolean shouldShowRationale(Activity activity, String permission) { return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission); } /** * Should show rationale boolean. * * @param fragment the fragment * @param permission the permission * @return true:用户获取权限被拒绝;false:用户获取权限被拒绝并且选择"不再询问" */ public static boolean shouldShowRationale(Fragment fragment, String permission) { return fragment.shouldShowRequestPermissionRationale(permission); } }
相关文章推荐
- 立波权限检测:普及android手机permission的科普应用(souapp.com搜应用网推荐)
- android 应用开启以后,动态检测并或者相机权限。
- 【android】五种控制Android应用的权限的方法
- android7.1增加一个开机自启动的bin应用遇到的权限问题
- 值得推荐的Android应用性能检测工具列表(转)
- Android开发中使用eclipse中的DDMS对应用的内存检测
- 保护你的隐私,五种控制Android应用的权限的方法
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- Android 检测哪些是危险权限(android6.0需要动态授权)
- Android app实现自更新和安装,权限检测适配Android6.0以下和Android6.0和Android7.0和Android8.0总结篇
- Apk包的内容和Android应用的权限
- Android之——申请应用系统管理员权限
- android 权限请求工具类
- 检测应用是否有某些权限能力
- android之使用signapk打包成系统应用,获取系统权限
- Android 应用权限管理默认开关的修改方法
- Android 6.0 以下系统的权限检测
- Android UI性能优化 检测应用中的UI卡顿
- Android应用的权限随想
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?