android应用权限检测工具类

本文介绍了一个用于Android应用的权限检测工具类,详细阐述了如何检查和请求运行时权限,确保应用功能的正常运行。通过使用这个工具类,开发者可以更便捷地管理Android系统的权限请求流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:不需要
     */
    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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值