(安卓)PermissionsDispatcher(安卓系统6.0权限)运行时权限请求框架

PermissionsDispatcher是一个基于注解、帮助开发者简单处理Android 6.0系统中的运行时权限的开源库。避免了开发者编写大量繁琐的样板代码。

开源地址:https://github.com/hotchemi/PermissionsDispatcher

1 . 添加依赖:

  // PermissionsDispatcher
    compile("com.github.hotchemi:permissionsdispatcher:3.2.0") {
        exclude module: "support-v13"
    }
    annotationProcessor "com.github.hotchemi:permissionsdispatcher-processor:3.2.0"

注意是把${latest.version}这整个换成最新版本号。

 

2. 在Activity或Fragment中使用

注解列表:

AnnotationRequiredDescription
@RuntimePermissions注解在其内部需要使用运行时权限的Activity或Fragment上
@NeedsPermission注解在需要调用运行时权限的方法上,当用户给予权限时会执行该方法
@OnShowRationale 注解在用于向用户解释为什么需要调用该权限的方法上,只有当第一次请求权限被用户拒绝,下次请求权限之前会调用
@OnPermissionDenied 注解在当用户拒绝了权限请求时需要调用的方法上
@OnNeverAskAgain 注解在当用户选中了授权窗口中的不再询问复选框后并拒绝了权限请求时需要调用的方法,一般可以向用户解释为何申请此权限,并根据实际需求决定是否再次弹出权限请求对话框

注意:被注解的方法不能是私有方法。

 

第一步:

  • @RuntimePermissions注解:这是必须使用的注解,用于标注在你想要申请权限的Activity或者Fragment上,如demo里面的PermissionsDispatcherActivity:

@RuntimePermissions
public class PermissionsDispatcherActivity extends AppCompatActivity implements View.OnClickListener {
}

第二步:

      一般常用的几个方法

  //需要检查权限的方法
    @NeedsPermission({Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA})
    void showCamera() {

    }

    @SuppressLint("NoCorrespondingNeedsPermission")
    @OnShowRationale({Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA})
    void showRationaleForCamera(PermissionRequest request) {

    }

    @OnPermissionDenied({Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA})
    void showDeniedForCamera() {
        Toast.makeText(getActivity(), "您拒绝了权限,该功能不可用", Toast.LENGTH_SHORT).show();
    }

    @OnNeverAskAgain({Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA})
    void showNeverAskForCamera() {
        dialogFromBottom.dismiss();
        new StyledDialog.Builder(getActivity())
                .setMessage("更换头像需要开启权限")
                .setPositiveButton("允许", new StyledDialog.OnClickListener() {
                    @Override
                    public void onClick() {
                        intent();
                    }
                })
                .setNegativeButton("拒绝", null)
                .show();

    }

 

经过以上方法后,再build一次Make project之后,编译器就会在在app\build\intermediates\classes\debug目录下与被注解的Activity同一个包下生成一个辅助类,名称为 “被注解的Activity的名称+PermissionsDispatcher” 的辅助类,用来调用被注解的Activity的方法(就是因为这个所以被注解的方法不能private,private方法的作用域不在其他的类)。所以,第一次用的话,要注解好之后,build一次,下面的方法里面的PermissionsDispatcherActivityPermissionsDispatcher才不会令AS报红。

第三步:

      

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        PermissionsDispatcherActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
    }

注意 

as

 

 红框部分  添成自己的Activity或Fragent名字

最后:申请权限的时候,调用辅助类的方法就行了

  //申请单个权限
    PermissionsDispatcherActivityPermissionsDispatcher.getSingleWithCheck(this);

同样换成自己的Activity或Fragent名字  

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值