EasyPermission:一句代码解决动态权限的申请和回执(带权限提示信息)

效果展示

以上是演示请求一个相机权限的过程:

首次申请(顶部提醒)-拒绝-再次申请(顶部提醒)-再次拒绝(并勾选禁止再次询问)-再次申请(中部弹窗引导)-在设置页不授权-返回-再次申请(中部弹窗引导)-在设置页将相机权限设为允许-返回app

在此过程中,任意一次拒绝和允许,都可以及时的拿到允许/拒绝的结果,进而在页面展示授权状态或者执行自己授权后的逻辑。以上的这些所有逻辑,只需要一句代码就能搞定,你相信吗?

是的,EasyPermission她来了,在项目中集成之后,安卓权限的检查、申请、提示、结果回执,一句代码就可以搞定。

EasyPermission.build()
    .mRequestCode(RC_CODE_PERMISSION)//请求code,自己定义
    .mPerms(Manifest.permission.CAMERA)//权限,可支持多个
    .setAutoOpenAppDetails(true)//默认true
    .mAlertInfo( new PermissionAlertInfo("**需要申请摄像头权限",
                                         "**需要申请摄像头拍摄权限,以便您能够通过扫一扫实现扫描二维码;通过拍照更换您帐号的头像;拍照上传一些注册帐号需要的证件信息。拒绝或取消授权将影响以上功能,不影响使用其他服务"))
    .mResult(new EasyPermissionResult() {
        @Override
        public void onPermissionsAccess(int requestCode) {
            super.onPermissionsAccess(requestCode);
            //权限已通过
        }
        
        @Override
        public void onPermissionsDismiss(int requestCode, @NonNull List<String> permissions) {
            super.onPermissionsDismiss(requestCode, permissions);
            //权限被拒绝
        }
).requestPermission();

接下来我们就看下它是怎么实现的。

需求来源

最近国家工信部对手机隐私安全越来越重视,权限不能滥用,不能随意申请(有些应用在启动时就申请一堆权限),更不能强制申请(有些权限不通过就不让进入应用的,已经被下架了)。最近公司又接到上头通知:公司某款app中有申请定位权限时没有对用户解释说明,需要及时整改。

和产品沟通后借鉴小红书、京东,类似这种在请求权限的时候,在底下弹出系统弹窗时,同时在顶部浮出说明信息;如果权限被禁止了,就在中部弹出说明弹窗,引导去设置页面中完成授权。

方案分析

咨询了隔壁IOS的现状、权限在项目中,权限的申请可以也必须配置说明文案,那么在使用申请权限时系统就会弹出信息说明。

可是安卓的动态权限管理比较松散(无情的吐槽),请求权限真的是干巴巴的请求,就像上面图1底部的系统弹窗。要像京东、小红书那样实现申请弹窗时提示信息,收到权限或者拒绝时隐藏,权限有可能被禁止(拒绝并勾选不再提示),禁止时需要弹窗提醒,引导去设置页返回时又得不到有效的回调(是的,京东从设置页回来的时候,授权后不会继续执行申请权限的逻辑,我们的EasyPermission却完全可以做到)。

根据大致的分析,其实流程也是挺清晰的,实现以上效果的流程图如下(最终的EasyPermission库的最终实现思路也是基于此做的):

方案中需要考虑的问题

看到以上流程图,其实实现起来感觉还好,但是有一些问题:

    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值