參考:
依賴導入
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
}
request : 返回是否【都通過權限】的Boolean值
/**
* 申請單個權限
* 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")
}
}
requestEach : 獲取每個權限申請的信息,通過name自行過濾
/**
* 申請單個權限,獲得詳細信息
*/
@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
requestEachCombined : 獲取所有權限申請的聚合信息
@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