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