PermissionsDispatcher库的使用(简单处理Android 6.0系统中的运行时权限的开源库)
2017-05-18 11:07
435 查看
PermissionsDispatcher使用
开源地址https://github.com/hotchemi/PermissionsDispatcher
一,添加依赖
app:build.graldedependencies { compile('com.github.hotchemi:permissionsdispatcher:${latest.version}') { // if you don't use android.app.Fragment you can exclude support for them exclude module: "support-v13" } annotationProcessor 'com.github.hotchemi:permissionsdispatcher-processor:${latest.version}' }
二,使用(以相机权限为例)
添加 AndroidManifest
<uses-permission android:name="android.permission.CAMERA" />
添加注释及使用
注:带注释的方法不能是私有的。Annotation | Required | Description |
---|---|---|
@RuntimePermissions | ✓ | 注解在其内部需要使用运行时权限的Activity或Fragment上 |
@NeedsPermission | ✓ | 注解在需要调用运行时权限的方法上,当用户给予权限时会执行该方法 |
@OnShowRationale | 注解在用于向用户解释为什么需要调用该权限的方法上,只有当第一次请求权限被用户拒绝,下次请求权限之前会调用 | |
@OnPermissionDenied | 注解在当用户拒绝了权限请求时需要调用的方法上 | |
@OnNeverAskAgain | 注解在当用户选中了授权窗口中的不再询问复选框后并拒绝了权限请求时需要调用的方法,一般可以向用户解释为何申请此权限,并根据实际需求决定是否再次弹出权限请求对话框 |
@RuntimePermissions public class MainActivity extends AppCompatActivity { @NeedsPermission(Manifest.permission.CAMERA) 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 showNev a04e erAskForCamera() { Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show(); } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button_camera).setOnClickListener(v -> { // NOTE: delegate the permission handling to generated method MainActivityPermissionsDispatcher.showCameraWithCheck(this); }); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); // NOTE: delegate the permission handling to generated method MainActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults); }
三,危险权限和权限组列表
android中文官方文档https://developer.android.google.cn/guide/topics/security/permissions.html#defining
权限组 | 权限 |
---|---|
CALENDAR | READ_CALENDAR WRITE_CALENDAR |
CAMERA | CAMERA |
CONTACTS | READ_CONTACTS WRITE_CONTACTS GET_ACCOUNTS |
LOCATION | ACCESS_FINE_LOCATION ACCESS_COARSE_LOCATION |
MICROPHONE | RECORD_AUDIO |
PHONE | READ_PHONE_STATE CALL_PHONE READ_CALL_LOG WRITE_CALL_LOG ADD_VOICEMAIL USE_SIP PROCESS_OUTGOING_CALLS |
SENSORS | BODY_SENSORS |
SMS | SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEIVE_MMS |
STORAGE | READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE |
相关文章推荐
- android 请求权限被拒处理方法(使用于6.0以下系统)
- Android 6.0 运行时权限处理完全解析 及 三方库的使用
- Android 6.0 运行时权限简单处理
- RxPermissions源码分析:使用RxJava处理Android 6.0运行时动态权限获取
- Android 6.0 运行时权限简单处理
- RxPermissions源码分析:使用RxJava处理Android 6.0运行时动态权限获取
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析
- Android 6.0 开发者对系统权限的使用与练习(Permissions Best Practices)
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理完全解析
- Android 6.0 运行时权限处理
- Android 6.0 运行时权限处理完全解析