安卓开发博客

Android权限动态检查开源库 -- Dexter

2018-07-09  本文已影响22人  木叶风神

先贴上这个开源库的主页地址:

GitHub - Karumi/Dexter: Android library that simplifies the process of requesting permissions at runtime.

这是一个不错的老外写的开源库,用来简化Android动态权限检测,因为Android 6.0以及以后的版本加入了动态权限的检测,来优化系统的安全性。但是当我们自己去写代码的时候就会遇到去动态申请权限的问题,Android明确规定了一些权限一定要动态申请才能使用,不然会报SecurityException。

当然了,Android原生肯定是提供了申请这些权限的接口,以及获取当前权限是否被用户确认申请等,但是在使用过程中比较复杂,所以下面介绍这个开源库的使用,非常简单。

首先新建Android工程项目,并且在build.gradle中添加依赖:

dependencies {
    //...
    implementation 'com.karumi:dexter:5.0.0'
}

使用起来也是非常方便,

public MyActivity extends Activity {
    @Override public void onCreate() {
        super.onCreate();
        Dexter.withActivity(activity)
            .withPermission(permission)
            .withListener(listener)
            .check();
    }
}
单个权限,
Dexter.withActivity(this)
    .withPermission(Manifest.permission.CAMERA)
    .withListener(new PermissionListener() {
        @Override public void onPermissionGranted(PermissionGrantedResponse response) {/* ... */}
        @Override public void onPermissionDenied(PermissionDeniedResponse response) {/* ... */}
        @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {/* ... */}
    }).check();
多个权限,
Dexter.withActivity(this)
    .withPermissions(
        Manifest.permission.CAMERA,
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.RECORD_AUDIO
    ).withListener(new MultiplePermissionsListener() {
        @Override public void onPermissionsChecked(MultiplePermissionsReport report) {/* ... */}
        @Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {/* ... */}
    }).check();

是不是很简单,最后给出一个示例,申请三个权限,当某个全选被拒绝时,提示跳转设置,

        MultiplePermissionsListener mMultiplePermissionListener =
                SnackbarOnAnyDeniedMultiplePermissionsListener.Builder
                        .with(findViewById(android.R.id.content), "Some permissions need to access!")
                        .withOpenSettingsButton("Settings")
                        .withCallback(new Snackbar.Callback() {
                            @Override
                            public void onShown(Snackbar sb) {
                                super.onShown(sb);
                            }

                            @Override
                            public void onDismissed(Snackbar transientBottomBar, int event) {
                                super.onDismissed(transientBottomBar, event);
                            }
                        }).build();
        Dexter.withActivity(this)
                .withPermissions(Manifest.permission.CAMERA,
                        Manifest.permission.READ_CONTACTS,
                        Manifest.permission.RECORD_AUDIO)
                .withListener(mMultiplePermissionListener).check();

Very Easy, Right?
最后附上demo视频:


permission.gif
上一篇下一篇

猜你喜欢

热点阅读