PermissionsDispatcher使用

开源地址https://github.com/hotchemi/PermissionsDispatcher

一,添加依赖

  • app:build.gralde
dependencies {  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 注解在当用户选中了授权窗口中的不再询问复选框后并拒绝了权限请求时需要调用的方法,一般可以向用户解释为何申请此权限,并根据实际需求决定是否再次弹出权限请求对话框
@RuntimePermissionspublic 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 showNeverAskForCamera() {        Toast.makeText(this, R.string.permission_camera_neverask, Toast.LENGTH_SHORT).show();    }}
@Overrideprotected 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);    });}@Overridepublic 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

更多相关文章

  1. android发送短信填入手机号码,6.0动态请求权限拨打电话
  2. Android:禁止滚动的解决方法
  3. Android AlertDialog包含EditText,软键盘不能弹出的解决方法
  4. Android 将一个数据对象保存到本地以及读取的方法
  5. Android 应用Root权限申请实现
  6. GPS开发常用方法和Criteria确定android location providerGPS
  7. 通过ddmlib杀死某个android进程的方法
  8. Android手动检查并申请权限

随机推荐

  1. android 进程与线程 - 开发文档翻译 - 线
  2. Service的xml属性解析
  3. Android(安卓)编译系统分析
  4. android 进程与线程 - 开发文档翻译 - 进
  5. 说说 Android(安卓)的常见 UI 控件
  6. (一)Android事件分发机制 - View篇
  7. Android中的Parcel机制 实现Bundle传递对
  8. Android系列之浅谈Android(安卓)3D旋转
  9. android - 为安全而设计 - 1 - 开发文档
  10. Cordova与Android之一 Activity跳转