zoukankan      html  css  js  c++  java
  • android 手机权限管理——PermissionsDispatcher

    Android6.0 之后某些权限需要动态申请,相比于之前版本复杂了许多。不过已经有大神给我们写好了框架(PermissionsDispatcher),我们用起来还是很方便。

    1、添加引用

      根据 gradle 版本进行如下配置:

      如果 Android Gradle Plugin >=2.2

      在 app 模块下的 build.gradle 添加下面的配置:

    compile 'com.github.hotchemi:permissionsdispatcher:2.3.2'
      annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:2.3.2'
    View Code

        Android Gradle Plugin <2.2

      需要额外在项目层级下的 build.gradle 添加下面配置:

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

     

    2、使用 五种注解(注解的方法不能是private)

    注解 是否必须 描述
    @RuntimePermissions 注册一个 Activity 或 Fragment 用于处理权限
    @NeedsPermission 注解一个方法,说明需要什么权限(一个或多个)
    @OnShowRationale   注解一个方法,解释为什么需要这些权限
    @OnPermissionDenied   注解一个方法,当用户拒绝授权时将调用该方法
    @OnNeverAskAgain   注解一个方法,当用户选择了 "不再提醒" 将调用该方法

      示例代码

    @RuntimePermissions 
    public class MainActivity extends AppCompatActivity {
    
        // 单个权限
        // @NeedsPermission(Manifest.permission.CAMERA)
        // 多个权限
        @NeedsPermission({ Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO })
        void showCamera() {
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.sample_content_fragment, CameraPreviewFragment.newInstance())
                    .addToBackStack("camera")
                    .commitAllowingStateLoss();
        }
    
        // 向用户说明为什么需要这些权限(可选)
        @OnShowRationale(Manifest.permission.CAMERA)
        void showRationaleForCamera(final PermissionRequest request) {
            new AlertDialog.Builder(this)
                .setMessage(R.string.permission_camera_rationale)
                .setPositiveButton(R.string.button_allow, (dialog, button) -> request.proceed())
                .setNegativeButton(R.string.button_deny, (dialog, button) -> request.cancel())
                .show();
        }
    
        // 用户拒绝授权回调(可选)
        @OnPermissionDenied(Manifest.permission.CAMERA)
        void showDeniedForCamera() {
            Toast.makeText(this, R.string.permission_camera_denied, Toast.LENGTH_SHORT).show();
        }
    
        // 用户勾选了“不再提醒”时调用(可选)
        @OnNeverAskAgain(Manifest.permission.CAMERA)
        void showNeverAskForCamera() {
            Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show();
        }
    }
    
    作者:linchaolong
    链接:http://www.jianshu.com/p/64e7334cde11
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    View Code

      

  • 相关阅读:
    php setcookie(name, value, expires, path, domain, secure) 参数详解
    cookie 和session 的区别详解
    一群猴子排成一圈,按1,2,...n 编号,数到m只,踢出局,直到剩下最后一个猴子是大王
    封装数据库mysql, mysqli
    图片处理类(缩略图)
    封装验证码类
    Java多线程编程(一)
    SpringMVC 自定义拦截资料
    Python包的相对导入时出现错误的解决方法
    TCP协议总结
  • 原文地址:https://www.cnblogs.com/Jett/p/7746094.html
Copyright © 2011-2022 走看看