美文网首页AndroidAndroid开发Android知识
Android开发动态获取权限(6.0以上API>23)

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

作者: 瓶子君 | 来源:发表于2016-11-18 16:20 被阅读568次

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

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

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

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

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

    android-RuntimePermissions
    Google官方的例子

    其中最著名的莫过于PermissionsDispatcher

    首先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}'
    }
    
    Project Build
    app module

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

    Alt+Insert
    选择相机权限
    @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);
                }
            });
    
    MUI

    以下代码为自动生成:

    @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);
        }
    

    .

    相关文章

      网友评论

        本文标题:Android开发动态获取权限(6.0以上API>23)

        本文链接:https://www.haomeiwen.com/subject/viqspttx.html