当前位置: 移动技术网 > IT编程>移动开发>Android > android 权限库EasyPermissions

android 权限库EasyPermissions

2018年12月18日  | 移动技术网IT编程  | 我要评论

男子潜入女浴室,公务员考试网职位表,夏天的味道吉他谱

文章链接: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 库地址

欢迎关注我的个人博客:

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网