Android开源项目-Easypermissions

作者: Tsy远 | 来源:发表于2016-08-08 19:57 被阅读26971次

    Easypermissions简化了Android M的运行时权限的申请、结果处理、判断等步骤。

    1 相关文档

    官方文档:

    https://github.com/googlesamples/easypermissions

    运行时权限官方文档解释:

    https://developer.android.com/training/permissions/requesting.html

    2 为什么使用Easypermissions

    Android M对权限系统进行了改变。Android M之前所需权限只需要在AndroidManifest中申请即可。但更新Android M系统后,部分“Dangerous Permission”需要在运行时询问申请。

    Normal and Dangerous Permissions解释:
    https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous

    如下图所示:

    运行时权限申请

    代码中如果需要申请运行时权限步骤:

    1 检查运行时权限

    ContextCompat.checkSelfPermission(thisActivity,
                    Manifest.permission.READ_CONTACTS)
            != PackageManager.PERMISSION_GRANTED
    

    2 申请权限

    ActivityCompat.requestPermissions(thisActivity,
                    new String[]{Manifest.permission.READ_CONTACTS},
                    MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    

    3 接收权限处理结果

    @Override
    public void onRequestPermissionsResult(int requestCode,
            String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.
    
                } else {
    
                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }
    
            // other 'case' lines to check for other
            // permissions this app might request
        }
    }
    
    

    以上即是google建议的运行时权限处理过程。代码量和处理地方还是比较繁琐的。so,Easypermissions应运而生。

    3 如何使用

    首先,引用库

    dependencies {
      compile 'pub.devrel:easypermissions:0.1.9'
    }
    
    

    同样,easypermissions处理权限分为3步。

    1 检查权限

    String[] perms = {Manifest.permission.CAMERA, Manifest.permission.CHANGE_WIFI_STATE};
    if (EasyPermissions.hasPermissions(this, perms)) {
       //...     
    } else {
        //...
    }
    

    2 申请权限

    EasyPermissions.requestPermissions(this, "拍照需要摄像头权限",
                        RC_CAMERA_AND_WIFI, perms);
    

    3 实现EasyPermissions.PermissionCallbacks接口,直接处理权限是否成功申请

    
        @Override
        public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
            // Forward results to EasyPermissions
            EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
        }
    
        //成功
        @Override
        public void onPermissionsGranted(int requestCode, List<String> list) {
            // Some permissions have been granted
            // ...
        }
    
        //失败
        @Override
        public void onPermissionsDenied(int requestCode, List<String> list) {
            // Some permissions have been denied
            // ...
        }
    

    4 总结

    Easypermissions主要简化了对权限申请结果的处理和判断,直接以接口的方式回调处理结果。不需要再自行进行处理。

    好用指数,5星!!!

    结尾

    更多文章关注我的公众号


    我的公众号

    相关文章

      网友评论

      • Android调调:谢谢分享,但是为什么我拒绝了还是走了获取成功的那个回调啊?而且没有第二次询问呢
        骑小猪看流星:哈哈 我就是想要这种结果啊哈哈哈 拒绝权限还是正常申请权限了 哈哈
        Android调调:@baymin_f3c8 在这个回调里去设置你要提示的弹窗onPermissionsDenied switch (requestCode) {
        case BAIDU_READ_PHONE_STATE:
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
        new AppSettingsDialog.Builder(this, "您未允许获取定位权限,您可在系统设置中开启")
        .setPositiveButton("去设置")
        .setNegativeButton("暂不")
        .setTitle("权限设置")
        .build()
        .show();
        }

        break;
        470e2a929b4b:老铁我也是这样,请问解决了么
      • 27ef5e1036aa:PermissionsDispatcher引入各种问题。比如,你的buildToolsVersion,targetSdkVersion都会影响到。浪费了我一下午的导入~找问题。
        RealistJ:你好,你最后用的是PermissionsDispatcher吗?我的Build后没有自动生成(Activity+需要检查权限)的方法
      • MoonlightAniki:没有PermissionsDispatcher好用,还缺少了一个禁止后不再询问的回调方法。
      • 我才是孙悟空:为什么Sync 后加了一大堆的包......还出错。。。
      • 多啦2022:来来来
      • SmartSean:博主,你用easyPermission在魅族手机试过吗?我的魅族手机运行这个行,默认是允许的,但是在模拟器上和华为手机上是正常的。
        曾是放牛娃: @SmartSean 小时候确实放牛,不算黑吧
        SmartSean:@曾是放牛娃 你这是高级黑么?
        曾是放牛娃:魅族应该还没有6.0以上的系统
      • 我行不来:楼主 我现在用这个框架申请权限 可是如果是在启动页申请 一般启动页都会设置android:theme="@android:style/Theme.Translucent"属性来防止打开的一瞬是一片白色 于是出现了 在这个启动页申请权限点击拒绝后 杀死应用重新打开就崩溃的问题 直接将你的demo MainActivity设置那个透明样式也会发生 请问你有好的解决办法吗- -
        我行不来: @我行不来 谢谢 我明白了😨
        我行不来:@Tsy远 直接下的你的demo只加了下样式 是继承的AppCompatActivity 还有别的地方需要配置吗
        Tsy远:因为你没用appcomp吧 样式要用aplcomp的
      • Monkey2016:Easypermissions,请将驼峰贯彻到底。
        2d144f58226b:关注的点很新奇。
        Chenstyle:EasyPermissions???
      • abdulla1992:RC_CAMERA_AND_WIFI ,这个一直找不到 :sob:
        布条麻绳:@abdulla1992 :sweat: 这是自己定义的常量。。
      • 钟航:permissiondispatcher,可能拼错了,有studio插件,直接生成代码,更无耻,可以试一试

      本文标题:Android开源项目-Easypermissions

      本文链接:https://www.haomeiwen.com/subject/pmursttx.html