危险权限列表及动态权限管理工具类(可以直接使用)

废话不多说,直接上危险权限列表:

这里写图片描述

危险权限是在Android 6.0版本(Api 23)推出了后才有这说法的, Android 6.0以上增加了动态获取权限api,想要动态获取手机的权限;类似iOS那样,在使用时,弹出对话框,提示用户,请求用户允许;如果你没做处理,就会权限报错。

接下来给大家一个我自己使用的权限管理类,可以直接导入项目使用:

public class PermissionsHelper {
    /**
     * 判断权限集合
     *
     * @param permissions 检测权限的集合
     * @return 权限已全部获取返回true,未全部获取返回false
     */
    public static boolean checkPermissions(Context mContext, String... permissions) {
        for (String permission : permissions) {
            if (!checkPermission(mContext, permission)) return false;
        }
        return true;
    }

    /**
     * 判断权限是否获取
     *
     * @param permission 权限名称
     * @return 已授权返回true,未授权返回false
     */
    public static boolean checkPermission(Context mContext, String permission) {
        return ContextCompat.checkSelfPermission(mContext, permission) == PackageManager.PERMISSION_GRANTED;
    }


    /**
     * 获取权限
     *
     * @param resultCode
     * @param permission
     */
    public static boolean checkPermission(Context mContext, int resultCode, String permission) {
        if (!checkPermission(mContext, permission)) {
            if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, permission)) {    // 因为requestPermissions方法会显示不在询问按钮
                showMissingPermissionDialog(mContext); //如果用户以前拒绝过改权限申请,则给用户提示
            } else {
                ActivityCompat.requestPermissions((Activity) mContext, new String[]{permission}, resultCode);    //进行权限请求
            }
            return false;
        } else {
            return true;
        }
    }

    /**
     * 获取权限
     *
     * @param resultCode
     * @param permissions
     */
    public static boolean checkPermission(Context mContext, int resultCode, String... permissions) {
        List<String> list = new ArrayList<>();
        for (String permission : permissions) {
            if (!checkPermission(mContext, permission) && !ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, permission)) {
                list.add(permission);
            }
        }
        if (!list.isEmpty()) {
            ActivityCompat.requestPermissions((Activity) mContext, list.toArray(new String[list.size()]), resultCode);
            return false;
        } else {
            return true;
        }
    }

    // 显示缺失权限提示
    public static void showMissingPermissionDialog(final Context mContext) {
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        final AlertDialog alertDialog = builder.create();
        builder.setMessage("当前应用缺少必要权限。\n\n请点击\"设置\"-\"权限\"-打开所需权限。\n\n最后点击两次后退按钮,即可返回。");
        // 拒绝, 退出应用
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                alertDialog.dismiss();
            }
        });
        builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                startAppSettings(mContext);
            }
        });
        builder.show();
    }

    // 启动应用的设置
    private static void startAppSettings(Context mContext) {
        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        intent.setData(Uri.parse("package:" + mContext.getPackageName()));
        mContext.startActivity(intent);
    }
}

其中的弹窗效果如下:
这里写图片描述


为了向别人、向世界证明自己而努力拼搏,而一旦你真的取得了成绩,才会明白:人无须向别人证明什么,只要你能超越自己。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值