PermissionsDispatcher库的使用(简单处理Android 6.0系统中的运行时权限的开源库)

来源:互联网 发布:mac 安装git 环境 编辑:程序博客网 时间:2024/05/21 15:46

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
阅读全文
0 0
原创粉丝点击