Android權限HaloPermission詳細使用
1. 常規(guī)使用
請求一個權限,然后接收結果回調
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()
請求多個權限
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE)
.{省略代碼}
//or
val permissions:Array<String> = arrayOf("","")
HoloPermission.with(this,*permissions)
.{省略代碼}
只關心權限被允許(未被允許)的回調
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.setGrandAction(object:GrandAction{
override fun onPermissionGrand(permissions: List<String>) {
{your code for grand}
}
}).run()
2. RationaleRender使用
如果你想向用戶解釋請求權限的原因,你可以使用setRationaleRender方法
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調設置代碼}
.setRationaleRender("為了確保功能的正常使用,請允許接下來的權限請求申請。")
.run()
如果你想自定義RationaleRender的樣式,比如:
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調設置代碼}
.setRationaleRender(object:RationaleRender{
override fun show(ctx: Context, permission: List<String>, process: RationaleRender.Process) {
//自定義使用了一個`Toast`展示信息。
Toast.makeText(ctx,"為了確保功能的正常使用,請允許接下來的權限請求申請。",Toast.LENGTH_SHORT).show()
//**為了確保后續(xù)的流程繼續(xù)執(zhí)行,你需要在適當的時候調用process的`onNext`或`onCancel`方法**
process.onNext()
//onNext()表示繼續(xù)后面的執(zhí)行
//onCancel會取消流程的執(zhí)行,并且會最終回調onPermissionDenied方法
}
})
.run()
關于此回調的觸發(fā)說明:
- 如果app之前請求過該權限,被用戶拒絕, 這個方法回回調。
- 如果用戶之前拒絕權限的時候勾選了對話框中”Don't ask again”的選項,那么這個方法不會回調
- 如果設備策略禁止應用擁有這條權限, 這個方法也不會回調
3. SettingRender使用
如果你想向用戶解釋請求權限的原因,你可以使用setRationaleRender方法
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調設置代碼}
.setSettingRender("無法使用外部存儲,請設置權限以便使用。")
.run()
如果你想自定義SettingRender的樣式,比如:
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調設置代碼}
.setSettingRender(object:SettingRender{
override fun show(ctx: Context, permission: List<String>, process: SettingRender.Process) {
//自定義使用了一個`Toast`展示信息。
Toast.makeText(ctx,"無法使用外部存儲,請設置權限以便使用。",Toast.LENGTH_SHORT).show()
//**為了確保后續(xù)的流程繼續(xù)執(zhí)行,你需要在適當的時候調用process的`onNext`或`onCancel`方法**
process.onNext()
//onNext()表示繼續(xù)后面的執(zhí)行,HaloPermission將打開系統(tǒng)應用權限設置界面
//onCancel會取消流程的執(zhí)行,不會打開系統(tǒng)應用權限設置界面,最終會回調onPermissionDenied方法
}
})
.run()
如果你覺得HaloPermission打開的權限設置界面不是您所滿意的,你可以重寫SettingRender的getCustomSettingIntent方法提供一個Intent,如果返回null則將使用HaloPermission的默認方式打開:
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略回調設置代碼}
.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. 自定義權限校驗規(guī)則
兩步即可實現
//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())
除非你非常有把握,否則不建議使用自定義權限校驗規(guī)則,因為HaloPermission會盡可能的去適配和兼容
5. 自定義請求方式
HaloPermission默認使用ShadowActivity的形式請求權限,當然只要你愿意,您可以使用Fragment的形式去實現,HaloPermission本身也提供了Fragment的請求方式,但是最終去掉了這部分的實現,因為對于Fragment的使用機制,如果使用不當,可能會出現一些奇怪的問題,我想這是你我都不愿看到的。同樣的,兩步即可實現自定義請求方式
//1. 創(chuàng)建自定義PermissionCaller
class CustomCaller: PermissionCaller{
override fun requestPermission(ctx: Context, responder: PermissionResponder, vararg permision: String) {
{可以仿造HaloPermission實現,最終要在適當的時候調用responder讓流程正常進行}
}
}
//2. 使用自定義規(guī)則
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略常規(guī)代碼}
.run(CustomCaller())
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android運行時權限終極方案(PermissionX)
- Android超清晰6.0權限申請AndPermission
- android6.0權限動態(tài)申請框架permissiondispatcher的方法
- Android EasyPermissions官方庫高效處理權限相關教程
- Android.permission.MODIFY_PHONE_STATE權限問題解決辦法
- 詳解Android權限管理之RxPermission解決Android 6.0 適配問題
- Android權限管理之Permission權限機制及使用詳解
- Android權限操作之uses-permission詳解
- Android 權限(permission)整理
- Android開發(fā)之permission動態(tài)權限獲取詳解
相關文章
Android 中從屏幕左下角彈出Dialog動畫效果的實現代碼
這篇文章主要介紹了Android 中從屏幕左下角彈出Dialog動畫效果的實現代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12
解析Android應用啟動后自動創(chuàng)建桌面快捷方式的實現方法
和IOS開發(fā)和Windows Phone開發(fā)相比,Android是開放的,Android上的開發(fā)也相對更加靈活,能夠做很多事情。有的朋友會發(fā)現,在某些Android應用安裝以后,第一次運行,就會在桌面創(chuàng)建快捷方式。這是如何做到的呢2013-05-05
Android中解決RecyclerView各種點擊事件的方法
這篇文章主要介紹了Android中解決RecyclerView各種點擊事件的方法,完美解決RecyclerView點擊事件、長按事件、子項點擊事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Android Bitmap詳解及Bitmap的內存優(yōu)化
這篇文章主要介紹了Android Bitmap詳解及Bitmap的內存優(yōu)化的相關資料,Bitmap是Android系統(tǒng)中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進行圖像剪切、旋轉、縮放等操作,并可以指定格式保存圖像文件,需要的朋友可以參考下2017-03-03

