tbruyelle / RxPermissions
RxPermission权限申请
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
}
/**
* 申请单个权限
* 1、返回true:申请成功 ;返回false:申请失败
* 2、同意后,之后再申请此权限则不再弹出提示框
* 3、不要使用compose方法,如RxLifeCycle
*/
@SuppressLint("CheckResult")
fun request1(activity: FragmentActivity?) {
val permissions = RxPermissions(activity!!)
permissions.setLogging(true)
permissions.request(Manifest.permission.READ_EXTERNAL_STORAGE)
.subscribe { t ->
println("申请单个权限========================================$t")
}
}
/**
* 申请多个权限
* 1、只要有一个禁止,则返回false;全部同意,则返回true。
* 2、某个权限同意后,之后再申请此权限则不再弹出提示框,其他的会继续弹出
* 3、此申请三个权限,但只会有两个弹窗,
* READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE 是属于一组,
*/
@SuppressLint("CheckResult")
fun request2(activity: FragmentActivity?) {
val permissions = RxPermissions(activity!!)
permissions.setLogging(true)
permissions.request(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_CALENDAR
).subscribe { t ->
println("申请多个权限========================================$t")
}
}
/**
* 申请单个权限,获得详细信息
*/
@SuppressLint("CheckResult")
fun requestEach1(activity: FragmentActivity?) {
val permissions = RxPermissions(activity!!)
permissions.setLogging(true)
permissions.requestEach(Manifest.permission.READ_EXTERNAL_STORAGE)
.subscribe { permission ->
printRequestEach(permission, Manifest.permission.READ_EXTERNAL_STORAGE)
}
}
/**
* 申请多个权限,获得详细信息
*/
@SuppressLint("CheckResult")
fun requestEach2(activity: FragmentActivity?) {
val permissions = RxPermissions(activity!!)
permissions.setLogging(true)
permissions.requestEach(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_CALENDAR
).subscribe { permission ->
printRequestEach(permission, Manifest.permission.READ_EXTERNAL_STORAGE)
printRequestEach(permission, Manifest.permission.WRITE_EXTERNAL_STORAGE)
printRequestEach(permission, Manifest.permission.READ_CALENDAR)
}
}
private fun printRequestEach(permission: Permission, targetPermission: String) {
if (permission.name.equals(targetPermission, true)) {
when {
permission.granted -> {
//同意后调用
println(
"printRequestEach--:" +
"-${permission.name}-: 同意"
)
}
permission.shouldShowRequestPermissionRationale -> {
//禁止,但没有选择“以后不再询问”,以后申请权限,会继续弹出提示
println(
"printRequestEach--:" +
"-${permission.name}-: 禁止但以后还能询问 "
)
}
else -> {
//禁止,但选择“以后不再询问”,以后申请权限,不会继续弹出提示
println(
"printRequestEach--:" +
"-${permission.name}-: 禁止并以后不再询问"
)
}
}
}
}
订阅的permission : 单个权限名称,如:
android.permission.READ_EXTERNAL_STORAGE
@SuppressLint("CheckResult")
fun checkPermissionRequestEachCombined(activity: FragmentActivity?) {
val permissions = RxPermissions(activity!!)
permissions.setLogging(true)
permissions.requestEachCombined(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_CALENDAR
).subscribe { permission ->
when {
permission.granted -> {
//全部同意后调用
println(
"requestEachCombined===============" +
"${permission.name} =========同意 "
);
}
permission.shouldShowRequestPermissionRationale -> {
//只要有一个选择:禁止,但没有选择“以后不再询问”,以后申请权限,会继续弹出提示
//permission.name :
// “android.permission.READ_EXTERNAL_STORAGE,
// android.permission.WRITE_EXTERNAL_STORAGE,
// android.permission.READ_CALENDAR”
//名字为逗号连接的一个字符串
println(
"requestEachCombined===============" +
"${permission.name} =========禁止但以后还能询问"
);
}
else -> {
//只要有一个选择:禁止,但选择“以后不再询问”,以后申请权限,不会继续弹出提示
println(
"requestEachCombined===============" +
"${permission.name} =========禁止并以后不再询问"
);
}
}
}
}
订阅的permission : 多个权限名称以逗号连接成一个字符串,如:
android.permission.READ_EXTERNAL_STORAGE,android.permission.READ_CALENDAR