前言
自6.0之后 所有的敏感權(quán)限都需要?jiǎng)討B(tài)申請(qǐng)焕窝,市面上隨之出現(xiàn)比較多的權(quán)限框架,easypermissions(google出品)照藻、AndPermission袜啃、RxPermissions(結(jié)合RxJava)。隨著 kotlin的逐漸普及幸缕,使用協(xié)程的人也越來(lái)越多群发,因此就有了本文,結(jié)合協(xié)程一行代碼動(dòng)態(tài)申請(qǐng)權(quán)限发乔。
通過(guò)創(chuàng)建Fragment結(jié)合google提供的easypermissions庫(kù)封裝動(dòng)態(tài)申請(qǐng)權(quán)限 成功后繼續(xù)操作熟妓。
- 實(shí)現(xiàn)dialog提示語(yǔ)闡述權(quán)限用途
- 支持禁用后跳轉(zhuǎn)到應(yīng)用設(shè)置界面手動(dòng)開啟權(quán)限
- 實(shí)現(xiàn)協(xié)程一行代碼 順序執(zhí)行 邏輯清晰明了
上代碼
private val permsSd = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE)
CoroutineScope(Dispatchers.Main).launch {
try {
requestPermissionsForResult(*permsSd, rationale = "為了更好的提供服務(wù),需要獲取存儲(chǔ)空間權(quán)限")
//todo 成功 接下來(lái)處理邏輯 比如 打開相冊(cè)
startActivity(Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI))
} catch (e: Exception) {
}
}
沒(méi)錯(cuò)就是這么簡(jiǎn)單 配合viemodel封裝一層try catch 更絲滑栏尚!
沒(méi)有回調(diào)起愈,沒(méi)有鏈?zhǔn)秸{(diào)用,從上到下執(zhí)行 簡(jiǎn)單易用译仗!
如何使用
在項(xiàng)目主工程的build.gradle文件中加入:
allprojects {
repositories {
.......
maven {
url "https://dl.bintray.com/liul1/maven"
}
......
}
在需要使用moudel的build.gradle文件中加入:
implementation 'com.github.lilei:coroutine-permissions:1.0.0'
需要看源碼的朋友移步:https://github.com/liulilei/CoroutinePermissions
如果對(duì)您有幫助抬虽,請(qǐng)動(dòng)動(dòng)手指點(diǎn)個(gè)star,謝謝纵菌!
本文參考資料:
https://github.com/diao-jian/CoroutinePermissions
https://github.com/florent37/InlineActivityResult