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