您的位置:首页 > 移动开发 > Android开发

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

2017-07-04 20:05 706 查看


对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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: