Android6.0权限管理依赖库的介绍和使用

android系统的权限问题不管是对用户还是开发者都是一块诟病,针对这个问题android官方终于在6.0的版本上给出方案了,一些危险权限不在是在manifest中注册下就能使用了,全都需要用户亲自确认后才能使用;在6.0之前也有一些手机厂商针对原生的系统做了二次开发,植入自己的rom,其中就有涉及到权限这一块问题;

今天在这里先给大家推荐一个依赖库,大家只要导入该库并在相应获取权限的地方添加调用代码就行,非常的简便,不在需要每个需要权限的页面写回调啦

下载地址:https://github.com/captain-miao/Android_M_requestPermissions

  • 该库的优势:

    1.导入配置非常的简单,极大的缩小学习成本,基本拿来就用
    2.对一些共用的地方做了封装,比如请求权限后的回调等;
    3.针对权限的拒绝比较好的处理,如:自定义弹框跳转app的系统详情页,可以手动去管理权限,清理数据等信息;

  • 欠缺的地方:

    1.针对多个权限请求结果回调的地方没有返回相应的权限名称和状态,对于一 些需要对单个权限允许授权的业务处理显得不是很友好,还需要通过再查一遍权限请求状态(其实这步是没有必要做的,如果回调中带回来的话);
    2.对自定义弹框的配置的默认信息不是很合理,比如:处理拒绝的逻辑都需要在引用的地方自己去配置相关函数,显得有点冗余,个人觉得不是很合理;
    3.没有提供“不再提醒”复选框的监听事件,对一些相对不再提醒做处理的码友来说也不是很合理
    4.没有提供直接跳转app系统的权限页,仅仅是跳转到详情页(ACTION_APPLICATION_DETAILS_SETTINGS),没有做到一步到位

总而言之:框架设计的还是不错的,针对上面欠缺的地方,码友完全可以拿来进行二次开发,也能节约不少时间和成本;

下面介绍该框架的三个重要的功能使用方式:

1.单个权限请求
private void reqPhonePermisson() {
        boolean isGranted = PermissionUtils.hasSelfPermissions(this, 
        Manifest.permission.READ_PHONE_STATE);
        if (isGranted)
            return;
        CheckPermission.from(this).setPermissions
        (Manifest.permission.READ_PHONE_STATE).setPermissionListener
        (new PermissionListener() {
            @Override
            public void permissionGranted() {

            }

            @Override
            public void permissionDenied() {

            }
        }).check();
    }

单个权限

注:其中setPermissions表示添加权限请求的监听,permissionGranted表示权限被允许,permissionDenied表示权限被拒绝

2.多个权限同时注册的时候,只弹出一个对话框;
private void initData() {
        boolean isGranted =PermissionUtils.hasSelfPermissions(this, 
        dangerousPermissionHome);
        if (!isGranted) {
            CheckPermission.from(this)..setPermissionListener(new 
            PermissionListener() {
                @Override
                public void permissionGranted() {

                }

                @Override
                public void permissionDenied() {

                }
            }).check();
        }
    }

多个权限

注:这里值得注意的是permissionGranted和permissionDenied这两个回调函数都是多个权限全部操作完之后才回执行的,如果你需要对某个权限的请求结果做处理的话,需要自己在回调中再做个权限状态的验证:如PermissionUtils.hasSelfPermissions(this, “某个权限的名称”)

3.权限被拒(包括选中“不再提醒”)后自定义弹框处理;
public void showPermissionDenyDialog(final ArrayList<PermissionBean> deniedPermissions) {
        if (TextUtils.isEmpty(denyMessage)) {
            // denyMessage
            permissionDenied(deniedPermissions);
            return;
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(R.drawable.ic_launcher);
        builder.setTitle(R.string.permission_help);
        builder.setMessage(denyMessage)
                .setCancelable(false)
                .setNegativeButton(deniedCloseButtonText, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        permissionDenied(deniedPermissions);
                    }
                });

        if (hasSettingButton) {
            builder.setPositiveButton(settingButtonText, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    try {
                        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
                                .setData(Uri.parse("package:" + packageName));
                        startActivityForResult(intent, REQ_CODE_REQUEST_SETTING);
                    } catch (ActivityNotFoundException e) {
                        e.printStackTrace();
                        Intent intent = new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
                        startActivityForResult(intent, REQ_CODE_REQUEST_SETTING);
                    }

                }
            });

        }
        builder.show();
    }

效果如图

针对以上在某种情况下的使用补充:

权限被拒,没有勾选 “不在提示”的复选框(该方框是在第一次被拒之后第二次请求才会出现的,是全局的概念哦,意思就是你同时请求多个权限,第一个被拒之后,直接切换到第二个,这时第二个就会出现“不在提醒”的方框),再次进入该页面的时候还会继续弹框让用户确认,反之,勾选过的就表示用户不同意该权限对app开放,导致的一些app中无法使用的功能,可以弹框告知,然而并不是彻底的就无法再次开启该权限的,可以到应用程序下面找到相应的app,点击进入Permissions一栏,进入权限管理页,如下图:
这里写图片描述
这里写图片描述

手动选中所需权限,即可在此开启以前被拒的权限功能

android6.0的权限管理大致介绍至此,希望对需要的人有所帮助

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值