博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 权限库EasyPermissions
阅读量:6216 次
发布时间:2019-06-21

本文共 2932 字,大约阅读时间需要 9 分钟。

众所周知,在android 6.0之后,如果应用程序需要危险权限,则用户必须明确向应用授予该权限。今天推荐一个权限相关的库EasyPermissions。

以相机权限来看,先看下不使用库的情况下的授权方式。

通过ContextCompat.checkSelfPermission() 去判断有没有权限的,没有ActivityCompat.requestPermissions()去请求权限,有的话则直接调用拍照的

private void requestPermission() {    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {        //权限判断,没有就去请求所需权限,传参 需要申请的权限(可以多个), requestCode请求码用于结果回调里判断        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CODE);    }else {        //有权限直接拍照,6.0以下的手机拍照走这里        takePhoto();    }}private void takePhoto(){    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    startActivity(intent);}

调用requestPermissions() 方法后需要在Activity中重写onRequestPermissionsResult() 来获取回调结果。

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);    if (PERMISSIONS_REQUEST_CODE == requestCode) {        for (int x : grantResults) {            if (x == PackageManager.PERMISSION_DENIED) {                //权限拒绝了                return;            }        }        takePhoto();    }}
使用EasyPermissions 来请求权限

依旧以拍照举例

同样需要在重写onRequestPermissionsResult(),这里就直接将请求结果传递EasyPermission 来处理。

@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {    super.onRequestPermissionsResult(requestCode, permissions, grantResults);    EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}

EasyPermissions.hasPermissions(Context context,String... perms) 用于检查权限是否授权,第二个参数可传多个权限值。

EasyPermissions.requestPermissions(context,String rationale,int requestCode,String... perms) 用于请求权限,rationale 是提示文字,requestCode 请求码,最后是多个权限值。

这里使用了@AfterPermissionGranted注解。

@AfterPermissionGranted(PERMISSIONS_REQUEST_CODE)private void requestPermission(){    String[] perms = {Manifest.permission.CAMERA};    //权限判断,第一次弹出系统的授权提示框    if (EasyPermissions.hasPermissions(this, perms)) {        //@AfterPermissionGranted 有权限直接执行 todo...    }else {        //没有权限的话,先提示,点确定后弹出系统的授权提示框        EasyPermissions.requestPermissions(this, "拍照过程需要用到相机权限",                PERMISSIONS_REQUEST_CODE, perms);    }}

EasyPermissions 库提供了权限请求的回调,activity实现 EasyPermissions.PermissionCallbacks重写两个方法回调。

/** * 允许权限成功后触发 */@Overridepublic void onPermissionsGranted(int requestCode, List
perms) {}/** * 禁止权限后触发 */@Overridepublic void onPermissionsDenied(int requestCode, List
perms) { if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { //在权限弹窗中,用户勾选了'不在提示'且拒绝权限的情况触发,可以进行相关提示。 }}

使用@AfterPermissionGranted注解,当权限请求被用户允许后,会根据requestCode来直接执行权限允许后的代码。

...if (EasyPermissions.hasPermissions(this, perms)) {    //加了@AfterPermissionGranted,授权成功后偶直接执行里面代码}...

不需要在权限成功回调中再去执行代码,简化了流程。

文章链接:

转载地址:http://pilja.baihongyu.com/

你可能感兴趣的文章
损失函数的概率验证及性质
查看>>
C#-----------------------------回收机制中Destroy与null的作用
查看>>
mysql读写分离总结
查看>>
ubuntu默认防火墙
查看>>
使用 GeoIP2 获取 IP 的地理位置
查看>>
详解spl_autoload_register()函数
查看>>
微软Azure AspNetCore微服务实战第2期
查看>>
Deepin-安装QQ音乐(Windows程序)
查看>>
Spring Boot 2.0(七):Spring Boot 如何解决项目启动时初始化资源
查看>>
移动手机号神州行去香港购买境外流量包方法和注意事项
查看>>
OpenResty(nginx+lua) 入门
查看>>
斗地主AI算法——第二章の数据结构
查看>>
【转】Go maps in action
查看>>
安卓巴士精选Android开发教程
查看>>
c++中捕捉内存泄露、异常
查看>>
Spark 优化器 ML的论文
查看>>
Spring透过ApplicationListener来触发contextrefreshedevent事件
查看>>
socket连接和TCP连接的关系
查看>>
ABP框架 - 缓存( 转)
查看>>
S域传递函数的零点和极点
查看>>