Android开发动态获取权限(6.0以上API>23)

    xiaoxiao2021-12-04  14

    大家都知道,在安卓6.0以前,权限是在安装APP的时候以列表的形式体现出来的,这对用户很不友好,很多流氓软件就因此大肆猖獗,盗取用户信息;

    在6.0的时候google终于意识到这个问题,以动态的方式去获取权限,需要用户一个一个去允许,用户友好了,码农又苦逼了哈哈,因为所谓的‘动态’,其实是不动态的,也就是说,权限并不会直接跳出来,而是需要码农手动去处理,其代码量以及逻辑性很难处理,于是很多大神就对权限进行了封装处理:

    PermissionsDispatcher 使用标注的方式,动态生成类处理运行时权限,目前还不支持嵌套Fragment。

    RxPermissions 基于RxJava的运行时权限检测框架

    Grant 简化运行时权限的处理,比较灵活

    android-RuntimePermissions Google官方的例子

    其中最著名的莫过于PermissionsDispatcher;

    —————————————————————————–

    2017-11-10更新:

    PermissionsDispatcher可直接从库中下载

    然后在需要使用的类中通过ALT + INSERT 调出

    —————————————————————————–

    首先Project Build中添加:

    buildscript { dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' } }

    然后在app module中添加:

    apply plugin: 'android-apt' dependencies { compile 'com.github.hotchemi:permissionsdispatcher:${latest.version}' apt 'com.github.hotchemi:permissionsdispatcher-processor:${latest.version}' }

    之后就可以在Activity中进行权限申请的操作了:

    @NeedsPermission(Manifest.permission.CAMERA) void showCamera() { Toast.makeText(this, "用户允许后", Toast.LENGTH_SHORT).show(); } @OnShowRationale(Manifest.permission.CAMERA) void showRationaleForCamera(final PermissionRequest request) { Toast.makeText(this, ""用户拒绝后选择再次出现", Toast.LENGTH_SHORT).show(); } @OnPermissionDenied(Manifest.permission.CAMERA) void showDeniedForCamera() { Toast.makeText(this, "每次拒绝调用", Toast.LENGTH_SHORT).show(); } @OnNeverAskAgain(Manifest.permission.CAMERA) void showNeverAskForCamera() { Toast.makeText(this, "每次触发都会询问一次", Toast.LENGTH_SHORT).show(); }

    触发动态权限:

    //触发动态权限 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { MainActivityPermissionsDispatcher.cameraStartWithCheck(MainActivity.this); } });

    以下代码为自动生成:

    @NeedsPermission(Manifest.permission.CAMERA) void cameraStart() { //业务处理 textView.setText("您获取到了权限"); System.out.println("开启权限"); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults); }
    转载请注明原文地址: https://ju.6miu.com/read-680267.html

    最新回复(0)