我在RxPermission 用法已经介绍过RxPermission的基本用法了。
以下代码就是RxPermission优雅的代码
String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION};
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions.requestEach(permissions)
.subscribe(new Consumer<Permission>() {
@Override
public void accept(Permission permission) throws Exception {
if (permission.granted) {
// 用户已经同意该权限
//result.agree(permission);
} else if (permission.shouldShowRequestPermissionRationale) {
// 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的对话框
//result.refuse(permission);
} else {
// 用户拒绝了该权限,并且选中『不再询问』,提醒用户手动打开权限
//result.noMoreQuestions(permission);
}
}
});
效果如下
图片.png下面结合Rxbinding
首先添加依赖
implementation 'com.jakewharton.rxbinding3:rxbinding:3.0.0-alpha2'
implementation 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
(1)如果只申请一个权限的情况下
代码如下:
RxPermissions rxPermissions = new RxPermissions(this);
RxView.clicks(bt_1)
.compose(rxPermissions.ensure(Manifest.permission.CAMERA))
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean granted) throws Exception {
if(granted){
//允许
}else{
//拒绝
}
}
});
(2)如果一次性申请多个权限的情况下
代码如下
RxPermissions rxPermissions = new RxPermissions(this);
RxView.clicks(bt_1)
.compose(rxPermissions.ensure(Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION))
.subscribe(new Consumer<Boolean>() {
@Override
public void accept(Boolean granted) throws Exception {
if(granted){
//允许
}else{
//拒绝
}
}
});
这里观察者接收一个boolean值,只有当所有权限都申请成功时才会返回true,否则但会false。
网友评论