方法2:RxPermission
RxPermission
可以帮助开发者简化获取权限的相关处理操作,而且内部也自动帮我们判断了版本是否需要申请权限。同时结合RxJava
可以方便的回调各种结果。官网:https://github.com/tbruyelle/RxPermissions 引入依赖
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
}
由于
rxpermissions
需要用到rxjava,所有rxjava
的包也一起引入。
声明权限
申请单个权限
RxPermissions permissions = new RxPermissions(this);
permissions.request(Manifest.permission.CAMERA)
.subscribe(new Consumer() {
@Override
public void accept(Boolean aBoolean) {
if (aBoolean ) {
Toast.makeText(MainActivity.this, "授权成功!", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this, "授权失败!", Toast.LENGTH_SHORT).show();
}
}
});
申请多个权限
RxPermissions permissions = new RxPermissions(this);
permissions.request(Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE)
.subscribe(new Consumer() {
@Override
public void accept(Boolean aBoolean) {
if (aBoolean ) {
Toast.makeText(MainActivity.this, "授权成功!", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this, "授权失败!", Toast.LENGTH_SHORT).show();
}
}
});
方法3:AndPermission
AndPermission
跟前面的RxPermission
使用方法类似官网:https://github.com/yanzhenjie/AndPermission 引入依赖
implementation 'com.yanzhenjie:permission:2.0.3'
申请单个或多个权限
AndPermission.with(this)
.runtime()
.permission(Permission.WRITE_EXTERNAL_STORAGE,Permission.CAMERA)
.onGranted(permissions -> {
Toast.makeText(MainActivity.this, "授权成功!", Toast.LENGTH_SHORT).show();
})
.onDenied(permissions -> {
Toast.makeText(MainActivity.this, "授权失败!", Toast.LENGTH_SHORT).show();
})
.start();
效果如下:
huwei0814 原创文章 29获赞 115访问量 2万+ 关注 私信 展开阅读全文作者:huwei0814