先贴上这个开源库的主页地址:
这是一个不错的老外写的开源库,用来简化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
网友评论