美文网首页安卓开发博客
Android权限动态检查开源库 -- Dexter

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

作者: 木叶风神 | 来源:发表于2018-07-09 22:10 被阅读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

    相关文章

      网友评论

        本文标题:Android权限动态检查开源库 -- Dexter

        本文链接:https://www.haomeiwen.com/subject/yskxpftx.html