Android6.0运行时权限-----AndPermission的使用

来源:互联网 发布:买家淘宝怎么发买家秀 编辑:程序博客网 时间:2024/06/14 03:15

最近才开始用AndPermission库,感觉非常不错,在使用的过程中,顺便就将它的用法写下来吧。


首先是AndPermission库的引入,通过添加依赖即可:

dependencies {    ...    compile 'com.yanzhenjie:permission:1.0.4'    }
也可以在Project Strcuture里搜索这个依赖库,直接添加。


然后看他如何判断是否有某权限,这里就用读短信为例,看代码:

if(AndPermission.hasPermission(this, Manifest.permission.READ_SMS)){    //执行业务}else {    //申请权限}
这行代码的语义感非常强,就是判断是否有读取短信的权限,第一个参数是上下文对象 ,在Activity中直接传入This,这个方法返回一个Boolean型的值,当返回值 为Ture时可以直接执行业务逻辑,当为False时再执行请求用户极权的逻辑。


接下来看在未获得权限时,如何云请求用户授权

//申请权限AndPermission.with(this)        .requestCode(100)        .permission(Manifest.permission.READ_SMS)        .send();


这里使用链式编程,requestCode方法里面接受一个int值,作为请求码,用于区分不同的权限请求,permission方法里面的参数可以写一个或多个权限,中间以逗号隔开而不使用数组大括号,然后调用send方法云请求权限。


然后在Activity或Fragment重写onRequestPermissionsResult方法为当前Activity或Fragment设置监听回调,这里和带近回值 的Intent需要重写onActviityResult来设置回调监听类,代码如下:

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,                                       @NonNull int[] grantResults) {    //只需要调用这一句,第一个参数是当前Activity/Fragment,回调方法写在当前Activity/Fragment    AndPermission.onRequestPermissionsResult(this,requestCode,permissions,grantResults);}

通过代友我们可以知道,这里就是将回调监听传递给了AndPermission。


下面我们来看看获取权限成功的回调:

// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionYes(100)private void getSucceed(List<String> grantedPermissions) {    // TODO 申请权限成功。}

可以看到这里的实现方法非常巧妙,使用了注解@PermissionYes(100)这里的100就是申请权限时的请求码,用于区分同一个Activity中不同的权限请求,这样实现就十分简洁清晰了。


最后我们来看看获取权限失败的回调:

// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionNo(100)private void getDefeated(List<String> deniedPermissions) {    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {        // 第一种:用默认的提示语。        AndPermission.defaultSettingDialog(this, 1).show();    }}

当权限被 用户拒绝的 时候你可以根据实际情况,可以提示用户一些功能无法使用,或者直接拒绝用户进行下一步操作,或者直接良出APP,这里AndPermission做了一个很好的细节就是当用户拒绝权限并且勾选了不再提示时,会默认提示用户可以云设置里面更改设置权限,并且让用户直接跳转到设置界面去打开权限,这里做的就非常友好了、


下面附录一个完整的例子,可以梳理一下思路,也可以直接略过:

@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);        if(AndPermission.hasPermission(this,Manifest.permission.READ_SMS,Manifest.permission.READ_CALENDAR,            Manifest.permission.CAMERA,Manifest.permission.GET_ACCOUNTS,            Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.RECORD_AUDIO,            Manifest.permission.CALL_PHONE,Manifest.permission.BODY_SENSORS,            Manifest.permission.READ_EXTERNAL_STORAGE)){        //执行业务    }else {        //申请权限        AndPermission.with(this)                .requestCode(100)                .permission(Manifest.permission.READ_SMS,Manifest.permission.READ_CALENDAR,                        Manifest.permission.CAMERA,Manifest.permission.GET_ACCOUNTS,                        Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.RECORD_AUDIO,                        Manifest.permission.CALL_PHONE,Manifest.permission.BODY_SENSORS,                        Manifest.permission.READ_EXTERNAL_STORAGE)                .send();    }}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,                                       @NonNull int[] grantResults) {    //只需要调用这一句,第一个参数是当前Activity/Fragment,回调方法写在当前Activity/Fragment    AndPermission.onRequestPermissionsResult(this,requestCode,permissions,grantResults);}// 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionYes(100)private void getSucceed(List<String> grantedPermissions) {    // TODO 申请权限成功。    ToastUtils.showToast(this,"已允许权限");}// 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。@PermissionNo(100)private void getDefeated(List<String> deniedPermissions) {    // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。    if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {        //用默认的提示语。        AndPermission.defaultSettingDialog(this, 1).show();    }    ToastUtils.showToast(this,"请设置相关权限");}

可以看到运行时权限无非就是:权限判断,权限申请,授权监听,有权逻辑,无权提示这五步,代码量是比以前增加不少,还好危险权限相对不多,也可以集中申请,用时判断;在考虑到Android的每一次进步,都对我们开发者虽然眼前吃点苦,但长期来看也是有很大好处的,也就可以很愉快地接受了这个现实。


这是通过网络上收集写完的,各位大神如果有好的文章,欢迎推荐,先谢谢大神们了!








原创粉丝点击