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