一句代码搞定权限请求,从未如此简单

这可能是使用最便捷的权限请求框架

Github传送地址,欢迎Star

另外想对Android 6.0权限需要深入了解的,可以看这篇文章Android 6.0运行权限解析(高级篇)

集成步骤

 

   // 权限请求框架:https://github.com/getActivity/XXPermissions
    implementation 'com.hjq:xxpermissions:9.0'

一句代码搞定权限请求,从未如此简单

点此查看完整的示例代码

 

XXPermissions.with(this)
        //.constantRequest() //可设置被拒绝后继续申请,直到用户授权或者永久拒绝
        //.permission(Permission.SYSTEM_ALERT_WINDOW, Permission.REQUEST_INSTALL_PACKAGES) //支持请求6.0悬浮窗权限8.0请求安装权限
        .permission(Permission.Group.STORAGE, Permission.Group.CALENDAR) //不指定权限则自动获取清单中的危险权限
        .request(new OnPermission() {

            @Override
            public void hasPermission(List<String> granted, boolean isAll) {
                
            }

            @Override
            public void noPermission(List<String> denied, boolean quick) {
                
            }
        });

是否有这个权限

 

if (XXPermissions.isHasPermission(this, Permission.Group.STORAGE)) {
    
}

跳转到设置页面

 

XXPermissions.gotoPermissionSettings(this);

框架亮点

  • 简洁易用,采用链式调用的方式,使用只需一句代码

  • 支持单个权限、多个权限、单个权限组、多个权限组请求

  • 不指定权限则自动获取清单文件上的危险权限进行申请

  • 如果动态申请的权限没有在清单文件中注册会抛出异常

  • 支持大部分国产手机直接跳转到具体的权限设置页面

  • 可设置被拒绝后继续申请,直到用户授权或者永久拒绝

  • 支持请求6.0及以上的悬浮窗权限和8.0及以上的安装权限

  • 本框架不依赖AppCompatSupport库,兼容Eclipse和Studio

混淆规则

 

-dontwarn com.hjq.permissions.**

常见问题

我们都知道,如果用户全部授予只会调用hasPermission方法,如果用户全部拒绝只会调用noPermission方法。

但是还有一种情况,如果在请求多种权限的情况下,这些权限不是被全部授予或者全部拒绝了,而是部分授权部分拒绝这种情况,框架会如何处理回调呢?

框架会先调用noPermission方法,再调用hasPermission方法。其中我们可以通过hasPermission方法中的isAll参数来判断权限是否全部授予了。如果想知道回调中的某个权限是否被授权或者拒绝,可以调用List集合类中的contains(Permission.XXX)方法来判断这个集合中是否包含了这个权限。

 

使用

  private void getXXPermissions(){
        XXPermissions.with(MainActivity.this)
                .permission(Permission.CAMERA)  //相机
                .permission(Permission.RECORD_AUDIO)  //录音权限
//                // 申请单个权限
//                .permission(Permission.RECORD_AUDIO)
//                // 申请多个权限
//                .permission(Permission.Group.CALENDAR)
                .request(new OnPermission() {
                    @Override
                    public void hasPermission(List<String> granted, boolean all) {
                        if (all) {
                            toast("获取相机和录音权限成功");
                        } else {
                            toast("获取部分权限成功,但部分权限未正常授予");
                        }
                    }

                    @Override
                    public void noPermission(List<String> denied, boolean never) {
                        if (never) {
                            toast("被永久拒绝授权,请手动授予相机和录音权限");
                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
                            XXPermissions.startPermissionActivity(MainActivity.this, denied);
                        } else {
                            toast("获取相机和录音权限失败");
                        }
                    }
                });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == XXPermissions.REQUEST_CODE) {
            if (XXPermissions.hasPermission(this, Permission.CAMERA) && XXPermissions.hasPermission(this, Permission.RECORD_AUDIO)) {
                toast("用户已经在权限设置页授予了相机和录音权限");
            }
        }
    }

    private void toast(String TITLE) {
        Toast.makeText(MainActivity.this, TITLE, Toast.LENGTH_SHORT).show();
    }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值