Android權(quán)限HaloPermission詳細(xì)使用
1. 常規(guī)使用
請(qǐng)求一個(gè)權(quán)限,然后接收結(jié)果回調(diào)
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.setListener(object: PermissionListener{
override fun onPermissionDenied(permissions: List<String>) {
{your code for deny}
}
override fun onPermissionGrand(permissions: List<String>) {
{your code for grand}
}
}).run()
請(qǐng)求多個(gè)權(quán)限
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE)
.{省略代碼}
//or
val permissions:Array<String> = arrayOf("","")
HoloPermission.with(this,*permissions)
.{省略代碼}
只關(guān)心權(quán)限被允許(未被允許)的回調(diào)
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.setGrandAction(object:GrandAction{
override fun onPermissionGrand(permissions: List<String>) {
{your code for grand}
}
}).run()
2. RationaleRender使用
如果你想向用戶解釋請(qǐng)求權(quán)限的原因,你可以使用setRationaleRender方法
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調(diào)設(shè)置代碼}
.setRationaleRender("為了確保功能的正常使用,請(qǐng)?jiān)试S接下來(lái)的權(quán)限請(qǐng)求申請(qǐng)。")
.run()
如果你想自定義RationaleRender的樣式,比如:
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調(diào)設(shè)置代碼}
.setRationaleRender(object:RationaleRender{
override fun show(ctx: Context, permission: List<String>, process: RationaleRender.Process) {
//自定義使用了一個(gè)`Toast`展示信息。
Toast.makeText(ctx,"為了確保功能的正常使用,請(qǐng)?jiān)试S接下來(lái)的權(quán)限請(qǐng)求申請(qǐng)。",Toast.LENGTH_SHORT).show()
//**為了確保后續(xù)的流程繼續(xù)執(zhí)行,你需要在適當(dāng)?shù)臅r(shí)候調(diào)用process的`onNext`或`onCancel`方法**
process.onNext()
//onNext()表示繼續(xù)后面的執(zhí)行
//onCancel會(huì)取消流程的執(zhí)行,并且會(huì)最終回調(diào)onPermissionDenied方法
}
})
.run()
關(guān)于此回調(diào)的觸發(fā)說(shuō)明:
- 如果app之前請(qǐng)求過(guò)該權(quán)限,被用戶拒絕, 這個(gè)方法回回調(diào)。
- 如果用戶之前拒絕權(quán)限的時(shí)候勾選了對(duì)話框中”Don't ask again”的選項(xiàng),那么這個(gè)方法不會(huì)回調(diào)
- 如果設(shè)備策略禁止應(yīng)用擁有這條權(quán)限, 這個(gè)方法也不會(huì)回調(diào)
3. SettingRender使用
如果你想向用戶解釋請(qǐng)求權(quán)限的原因,你可以使用setRationaleRender方法
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調(diào)設(shè)置代碼}
.setSettingRender("無(wú)法使用外部存儲(chǔ),請(qǐng)?jiān)O(shè)置權(quán)限以便使用。")
.run()
如果你想自定義SettingRender的樣式,比如:
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調(diào)設(shè)置代碼}
.setSettingRender(object:SettingRender{
override fun show(ctx: Context, permission: List<String>, process: SettingRender.Process) {
//自定義使用了一個(gè)`Toast`展示信息。
Toast.makeText(ctx,"無(wú)法使用外部存儲(chǔ),請(qǐng)?jiān)O(shè)置權(quán)限以便使用。",Toast.LENGTH_SHORT).show()
//**為了確保后續(xù)的流程繼續(xù)執(zhí)行,你需要在適當(dāng)?shù)臅r(shí)候調(diào)用process的`onNext`或`onCancel`方法**
process.onNext()
//onNext()表示繼續(xù)后面的執(zhí)行,HaloPermission將打開(kāi)系統(tǒng)應(yīng)用權(quán)限設(shè)置界面
//onCancel會(huì)取消流程的執(zhí)行,不會(huì)打開(kāi)系統(tǒng)應(yīng)用權(quán)限設(shè)置界面,最終會(huì)回調(diào)onPermissionDenied方法
}
})
.run()
如果你覺(jué)得HaloPermission打開(kāi)的權(quán)限設(shè)置界面不是您所滿意的,你可以重寫SettingRender的getCustomSettingIntent方法提供一個(gè)Intent,如果返回null則將使用HaloPermission的默認(rèn)方式打開(kāi):
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調(diào)設(shè)置代碼}
.setSettingRender(object:SettingRender{
override fun show(ctx: Context, permission: List<String>, process: SettingRender.Process) {
{省略的代碼}
}
//自定義SettingIntent
override fun getCustomSettingIntent(ctx: Context): Intent? {
return super.getCustomSettingIntent(ctx)
}
})
.run()
4. 自定義權(quán)限校驗(yàn)規(guī)則
兩步即可實(shí)現(xiàn)
//1. 創(chuàng)建自定義PermissionChecker
class CustomChecker:PermissionChecker{
override fun isPermissionGranted(ctx: Context, permission: String): Boolean {
{使用你的規(guī)則}
}
}
//2. 使用自定義規(guī)則
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略常規(guī)代碼}
.run(CustomChecker())
除非你非常有把握,否則不建議使用自定義權(quán)限校驗(yàn)規(guī)則,因?yàn)镠aloPermission會(huì)盡可能的去適配和兼容
5. 自定義請(qǐng)求方式
HaloPermission默認(rèn)使用ShadowActivity的形式請(qǐng)求權(quán)限,當(dāng)然只要你愿意,您可以使用Fragment的形式去實(shí)現(xiàn),HaloPermission本身也提供了Fragment的請(qǐng)求方式,但是最終去掉了這部分的實(shí)現(xiàn),因?yàn)閷?duì)于Fragment的使用機(jī)制,如果使用不當(dāng),可能會(huì)出現(xiàn)一些奇怪的問(wèn)題,我想這是你我都不愿看到的。同樣的,兩步即可實(shí)現(xiàn)自定義請(qǐng)求方式
//1. 創(chuàng)建自定義PermissionCaller
class CustomCaller: PermissionCaller{
override fun requestPermission(ctx: Context, responder: PermissionResponder, vararg permision: String) {
{可以仿造HaloPermission實(shí)現(xiàn),最終要在適當(dāng)?shù)臅r(shí)候調(diào)用responder讓流程正常進(jìn)行}
}
}
//2. 使用自定義規(guī)則
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略常規(guī)代碼}
.run(CustomCaller())
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android運(yùn)行時(shí)權(quán)限終極方案(PermissionX)
- Android超清晰6.0權(quán)限申請(qǐng)AndPermission
- android6.0權(quán)限動(dòng)態(tài)申請(qǐng)框架permissiondispatcher的方法
- Android EasyPermissions官方庫(kù)高效處理權(quán)限相關(guān)教程
- Android.permission.MODIFY_PHONE_STATE權(quán)限問(wèn)題解決辦法
- 詳解Android權(quán)限管理之RxPermission解決Android 6.0 適配問(wèn)題
- Android權(quán)限管理之Permission權(quán)限機(jī)制及使用詳解
- Android權(quán)限操作之uses-permission詳解
- Android 權(quán)限(permission)整理
- Android開(kāi)發(fā)之permission動(dòng)態(tài)權(quán)限獲取詳解
相關(guān)文章
Android 中從屏幕左下角彈出Dialog動(dòng)畫效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 中從屏幕左下角彈出Dialog動(dòng)畫效果的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
Android內(nèi)存泄漏排查利器LeakCanary
這篇文章主要為大家詳細(xì)介紹了Android內(nèi)存泄漏排查利器LeakCanary的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
解析Android應(yīng)用啟動(dòng)后自動(dòng)創(chuàng)建桌面快捷方式的實(shí)現(xiàn)方法
和IOS開(kāi)發(fā)和Windows Phone開(kāi)發(fā)相比,Android是開(kāi)放的,Android上的開(kāi)發(fā)也相對(duì)更加靈活,能夠做很多事情。有的朋友會(huì)發(fā)現(xiàn),在某些Android應(yīng)用安裝以后,第一次運(yùn)行,就會(huì)在桌面創(chuàng)建快捷方式。這是如何做到的呢2013-05-05
Android隱藏頂部狀態(tài)欄所遇到的問(wèn)題
本文給大家分享兩種隱藏狀態(tài)欄的方法及在實(shí)現(xiàn)的過(guò)程中遇到的坑,下面在本文中給大家做個(gè)總結(jié),希望對(duì)大家學(xué)習(xí)android頂部狀態(tài)欄知識(shí)有所幫助2016-11-11
Android開(kāi)發(fā)中的MVC設(shè)計(jì)模式淺析
這篇文章主要介紹了Android開(kāi)發(fā)中的MVC設(shè)計(jì)模式淺析,本文講解了對(duì)Android開(kāi)發(fā)中的MVC設(shè)計(jì)模式的理解,需要的朋友可以參考下2015-06-06
Android中解決RecyclerView各種點(diǎn)擊事件的方法
這篇文章主要介紹了Android中解決RecyclerView各種點(diǎn)擊事件的方法,完美解決RecyclerView點(diǎn)擊事件、長(zhǎng)按事件、子項(xiàng)點(diǎn)擊事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android冷啟動(dòng)優(yōu)化的3個(gè)小案例分享
為了提高App的冷啟動(dòng)耗時(shí),除了在常規(guī)的業(yè)務(wù)側(cè)進(jìn)行耗時(shí)代碼優(yōu)化之外,為了進(jìn)一步縮短啟動(dòng)耗時(shí),需要在純技術(shù)測(cè)做一些優(yōu)化探索,本期我們從類預(yù)加載、Retrofit 、ARouter方面進(jìn)行了進(jìn)一步的優(yōu)化,感興趣的同學(xué)跟著小編一起來(lái)看看吧2023-07-07
Android Bitmap詳解及Bitmap的內(nèi)存優(yōu)化
這篇文章主要介紹了Android Bitmap詳解及Bitmap的內(nèi)存優(yōu)化的相關(guān)資料,Bitmap是Android系統(tǒng)中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進(jìn)行圖像剪切、旋轉(zhuǎn)、縮放等操作,并可以指定格式保存圖像文件,需要的朋友可以參考下2017-03-03

