1.直接获取权限(使用Retrolambda使代码更加简洁,当然并不是必须使用):
// 必须在初始化阶段调用,例如onCreate()方法中
RxPermissions.getInstance(this)
.request(Manifest.permission.CAMERA)
.subscribe(granted -> {
if (granted) { // 在android 6.0之前会默认返回true
// 已经获取权限
} else {
// 未获取权限
}
});
2.通过条件触发获取权限(结合RxBinding使用)
// 必须在初始化阶段调用,例如onCreate()方法中
RxView.clicks(findViewById(R.id.enableCamera))
.compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA))
.subscribe(granted -> {
// 当R.id.enableCamera被点击的时候触发获取权限
});
3.一次请求多个权限(有两种方式)
如果同时请求多个权限,下面这种方式会合并请求结果,即所有权限请求成功会返回true,若有一个权限未成功则返回false。
RxPermissions.getInstance(this)
.request(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(granted -> {
if (granted) {
// 所有权限请求被同意
} else {
// 至少有一个权限没同意
}
});
当然你可以通过requestEach or ensureEach 来分别获取每一个权限请求的结果。
RxPermissions.getInstance(this)
.requestEach(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(permission -> { // 会发送两个Permission对象
if (permission.granted) {
// `permission.name` is granted !
}
});
// 必须在初始化阶段调用,例如onCreate()方法中
RxPermissions.getInstance(this)
.request(Manifest.permission.CAMERA)
.subscribe(granted -> {
if (granted) { // 在android 6.0之前会默认返回true
// 已经获取权限
} else {
// 未获取权限
}
});
2.通过条件触发获取权限(结合RxBinding使用)
// 必须在初始化阶段调用,例如onCreate()方法中
RxView.clicks(findViewById(R.id.enableCamera))
.compose(RxPermissions.getInstance(this).ensure(Manifest.permission.CAMERA))
.subscribe(granted -> {
// 当R.id.enableCamera被点击的时候触发获取权限
});
3.一次请求多个权限(有两种方式)
如果同时请求多个权限,下面这种方式会合并请求结果,即所有权限请求成功会返回true,若有一个权限未成功则返回false。
RxPermissions.getInstance(this)
.request(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(granted -> {
if (granted) {
// 所有权限请求被同意
} else {
// 至少有一个权限没同意
}
});
当然你可以通过requestEach or ensureEach 来分别获取每一个权限请求的结果。
RxPermissions.getInstance(this)
.requestEach(Manifest.permission.CAMERA,
Manifest.permission.READ_PHONE_STATE)
.subscribe(permission -> { // 会发送两个Permission对象
if (permission.granted) {
// `permission.name` is granted !
}
});