资讯专栏INFORMATION COLUMN

android 权限库EasyPermissions

用户84 / 2015人阅读

摘要:文章链接众所周知,在之后,如果应用程序需要危险权限,则用户必须明确向应用授予该权限。今天推荐一个权限相关的库。以相机权限来看,先看下不使用库的情况下的授权方式。用于检查权限是否授权,第二个参数可传多个权限值。

文章链接:https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA

众所周知,在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() 来获取回调结果。

@Override
public 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 来处理。

@Override
public 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重写两个方法回调。

/**
 * 允许权限成功后触发
 */
@Override
public void onPermissionsGranted(int requestCode, List perms) {
}

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

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

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

不需要在权限成功回调中再去执行代码,简化了流程。
EasyPermissions 库地址https://github.com/googlesamples/easypermissions

欢迎关注我的个人博客:https://www.manjiexiang.cn/

更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/2568.html

相关文章

  • android 权限EasyPermissions

    摘要:文章链接众所周知,在之后,如果应用程序需要危险权限,则用户必须明确向应用授予该权限。今天推荐一个权限相关的库。以相机权限来看,先看下不使用库的情况下的授权方式。用于检查权限是否授权,第二个参数可传多个权限值。 文章链接:https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA 众所周知,在android 6.0之后,如果应用程序需要危险权限,...

    animabear 评论0 收藏0
  • Android运行时权限的总结,以及EasyPermissions框架的使用

    摘要:第三个参数这次请求权限的唯一标识请求码,。申请如果失败了,这时候有个方法出现了这个方法是谷歌建议的。系统只会授予应用明确请求的权限。然而一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。 1、android6.0以后的危险权限介绍 (注意:Android O 8.0对于权限更加严格,下面会说一下8.0)android6.0以后有些危险权限需要手动去授权,就有...

    whatsns 评论0 收藏0
  • WebRTC入门教程(三) | Android 端如何使用 WebRTC

    摘要:下面我们就看一下具体如何申请权限静态权限申请在项目中的中增加以下代码动态权限申请随着的发展,对安全性要求越来越高。其定义如下通过上面的代码我们就将显示视频的定义好了。当发送消息,并收到服务端的后,其状态变为。 作者:李超,如遇到相关问题,可以点击这里与作者直接交流。 前言 在学习 WebRTC 的过程中,学习的一个基本步骤是先通过 JS 学习 WebRTC的整体流程,在熟悉了整体流程之后,...

    番茄西红柿 评论0 收藏0
  • WebRTC入门教程(三) | Android 端如何使用 WebRTC

    摘要:下面我们就看一下具体如何申请权限静态权限申请在项目中的中增加以下代码动态权限申请随着的发展,对安全性要求越来越高。其定义如下通过上面的代码我们就将显示视频的定义好了。当发送消息,并收到服务端的后,其状态变为。 作者:李超,如遇到相关问题,可以点击这里与作者直接交流。 前言 在学习 WebRTC 的过程中,学习的一个基本步骤是先通过 JS 学习 WebRTC的整体流程,在熟悉了整体流程之后,...

    jsbintask 评论0 收藏0
  • 解读Android官方开发指导 - 运行时权限

    摘要:权限申请官方开发指导上使用在中已经申明的危险权限时需要用户授权。下面结合官方的开发指导对这几个做下说明。检查是否已经具有了相关权限。如,和权限就是属于组的。分门别类不仅仅是为了方便容易阅读,组内权限在申请上也是有关联的。 showImg(https://segmentfault.com/img/remote/1460000006962053); 系统权限简介 Android出于系统稳定...

    stackvoid 评论0 收藏0

发表评论

0条评论

用户84

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<