前面说了 AndPermission 的集成使用了,那里说的全一些,这里就简单记录下 RxPermission 的使用就得了,详细的权限问题去看:AndPermission 集成使用
添加依赖
compile 'com.tbruyelle.rxpermissions2:rxpermissions:0.9.5@aar'
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
RxPermission 一看名字就知道是用 Rxjava 的,关于 Rxjava 部分的依赖就得自己手动添加了
API
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions.requestEach(Manifest.permission.CAMERA)
.subscribe(permission -> {
if (permission.granted) {
show("用户给权限啦");
return;
}
if (permission.shouldShowRequestPermissionRationale) {
show("用户不给权限");
return;
}
show("弹窗不显示");
});
没啥难度,看过 AndPermission 了,RxPermission 的回调处理就简单了,依然是用户同意,用户拒绝,用户不再显示权限弹窗了这3种,根据 API 来就行
RxPermission 的优点在于可以和 Rxbinding 结合,这是官方文档的例子
// Must be done during an initialization phase like onCreate
RxView.clicks(findViewById(R.id.enableCamera))
.compose(rxPermissions.ensure(Manifest.permission.CAMERA))
.subscribe(granted -> {
// R.id.enableCamera has been clicked
})
注意点
需要注意的是 RxPermission 只能接受 activity 对象,为啥呢,我们跟一下代码
很明显 RxPermission 是在目标 activity 里面添加了一个 fragment 用于拦截权限申请结果。