欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android 权限库EasyPermissions

程序员文章站 2022-03-24 12:57:05
文章链接: "https://mp.weixin.qq.com/s/H63Sn03xV0JoINXB4SWWKA" 众所周知,在android 6.0之后,如果应用程序需要危险权限,则用户必须明确向应用授予该权限。今天推荐一个权限相关的库EasyPermissions。 以相机权限来看,先看下不使用 ......

文章链接: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<string> perms) {
}

/**
 * 禁止权限后触发
 */
@override
public void onpermissionsdenied(int requestcode, list<string> perms) {
    if (easypermissions.somepermissionpermanentlydenied(this, perms)) {
        //在权限弹窗中,用户勾选了'不在提示'且拒绝权限的情况触发,可以进行相关提示。
    }
}

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

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

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

欢迎关注我的个人博客:

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

android 权限库EasyPermissions