对android 6.0 动态获取权限框架 PermissionDispatcher 的使用

对android 6.0 动态获取权限框架 PermissionDispatcher 的使用

android studio 引入
需要使用PermissionsDispatcher,需要在project的 build.gradle中添加

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

然后在app module中的build.gradle中添加:(必须在app module中添加)

apply plugin: 'android-apt'

dependencies {
 compile 'com.github.hotchemi:permissionsdispatcher:2.1.3'
    apt 'com.github.hotchemi:permissionsdispatcher-processor:2.1.3'
}

主要有下面5个注解

@RuntimePermissions 标记需要运行时判断的类
@NeedsPermission 标记需要检查权限的方法
@OnShowRationale 授权提示回调
@OnPermissionDenied 授权被拒绝回调
@OnNeverAskAgain 授权不再拒绝不再显示回调

使用

1.@RuntimePermissions 在Activity或者Fragment中需要添加,来处理权限的问题

2.需要权限的时候,先要检查是否拥有该权限 (MyDeatilsActivity 替换成当前的类(Activity或者Fragment))

3.将需要权限的操作定义在一个方法里,并用 @NeedsPermission(Manifest.permission.CAMERA)表明需要的权限(可以是多个)
4.编译一下,就会生成【当前类名+PermissionsDispatcher】的类,在原本调用的地方调用@NeedsPermission标记的方法,
这时候你会发现会对应生成【方法名+WithCheck】的方法
如:MyDeatilsActivityPermissionsDispatcher.showContactsWithCheck(MyDeatilsActivity.this);

  /**

   * 如果用户拒绝该权限执行的方法

   */
    @OnPermissionDenied(Manifest.permission.CAMERA)
    void onDeniedTakeCamera() {
        Toast.makeText(getApplicationContext(), "Camera Denied", Toast.LENGTH_SHORT).show();
    }
   /**

     * 如果用户选择了让设备“不再询问”,而调用的方法

     */
    @OnNeverAskAgain(Manifest.permission.CAMERA)
    void onNeverAskTakeCamera() {
        Toast.makeText(getApplicationContext(), "Camera NeverAsk", Toast.LENGTH_SHORT).show();
    }
   /**

     * 如果用户拥有该权限执行的方法

     */
    @NeedsPermission({Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS})
    void showContacts() {
        Toast.makeText(getApplicationContext(), "Contacts", Toast.LENGTH_SHORT).show();
    }
   /**

     * 权限请求回调,提示用户之后,用户点击“允许”或者“拒绝”之后调用此方法

     *

     * @param requestCode  定义的权限编码

     * @param permissions  权限名称

     * @param grantResults 允许/拒绝

     */
    @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            MyDeatilsActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
        }
发布了33 篇原创文章 · 获赞 5 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hjiangshujing/article/details/52795936
今日推荐