开源库地址:
https://github.com/tbruyelle/RxPermissions
该库允许将 RxJava 与新的 Android M 权限模型一起使用
一、导包及配置
implementation 'com.github.tbruyelle:rxpermissions:0.12'
//rxJava 注意:这里必须是rxJava3
api 'io.reactivex.rxjava3:rxjava:3.0.4'
api 'io.reactivex.rxjava3:rxandroid:3.0.0'
二、使用
/**
* 申请权限工具类
*/
public class ApplyPermissionUtil {
private RxPermissions rxPermission;
private String TAG = getClass().getName();
public static ApplyPermissionUtil newUtil(){
return new ApplyPermissionUtil();
}
public void requestPermissions(Activity activity, String... permissions){
if (rxPermission == null){
rxPermission = new RxPermissions((FragmentActivity) activity);
}
rxPermission.requestEachCombined(permissions)
.subscribe(permission -> { // will emit 2 Permission objects
if (permission.granted) {
// 用户已经同意该权限
Log.d(TAG, permission.name + " is granted.");
} else if (permission.shouldShowRequestPermissionRationale) {
// 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的对话框
Log.d(TAG, permission.name + " is denied. More info should be provided.");
} else {
// 用户拒绝了该权限,并且选中『不再询问』
Log.d(TAG, permission.name + " is denied.");
ToastUtil.showToast("请在设置中开启该权限");
}
});
}
public void requestPermissions(Fragment fragment, String... permissions){
if (rxPermission == null){
rxPermission = new RxPermissions(fragment);
}
rxPermission.requestEachCombined(permissions)
.subscribe(permission -> { // will emit 2 Permission objects
if (permission.granted) {
// 用户已经同意该权限
Log.d(TAG, permission.name + " is granted.");
} else if (permission.shouldShowRequestPermissionRationale) {
// 用户拒绝了该权限,没有选中『不再询问』(Never ask again),那么下次再次启动时,还会提示请求权限的对话框
Log.d(TAG, permission.name + " is denied. More info should be provided.");
} else {
// 用户拒绝了该权限,并且选中『不再询问』
Log.d(TAG, permission.name + " is denied.");
ToastUtil.showToast("请在设置中开启该权限");
}
});
}
}
三、注意事项
1、项目中必须导入rxJava3 ,否则无法调用subscribe方法
2、上述方法获取到的是组合的详细结果,如果需要使用其他方法,请查阅开源库