Android權(quán)限HaloPermission詳細使用
1. 常規(guī)使用
請求一個權(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()
請求多個權(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使用
如果你想向用戶解釋請求權(quán)限的原因,你可以使用setRationaleRender方法
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) .{省略回調(diào)設(shè)置代碼} .setRationaleRender("為了確保功能的正常使用,請允許接下來的權(quán)限請求申請。") .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) { //自定義使用了一個`Toast`展示信息。 Toast.makeText(ctx,"為了確保功能的正常使用,請允許接下來的權(quán)限請求申請。",Toast.LENGTH_SHORT).show() //**為了確保后續(xù)的流程繼續(xù)執(zhí)行,你需要在適當?shù)臅r候調(diào)用process的`onNext`或`onCancel`方法** process.onNext() //onNext()表示繼續(xù)后面的執(zhí)行 //onCancel會取消流程的執(zhí)行,并且會最終回調(diào)onPermissionDenied方法 } }) .run()
關(guān)于此回調(diào)的觸發(fā)說明:
- 如果app之前請求過該權(quán)限,被用戶拒絕, 這個方法回回調(diào)。
- 如果用戶之前拒絕權(quán)限的時候勾選了對話框中”Don't ask again”的選項,那么這個方法不會回調(diào)
- 如果設(shè)備策略禁止應(yīng)用擁有這條權(quán)限, 這個方法也不會回調(diào)
3. SettingRender使用
如果你想向用戶解釋請求權(quán)限的原因,你可以使用setRationaleRender方法
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) .{省略回調(diào)設(shè)置代碼} .setSettingRender("無法使用外部存儲,請設(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) { //自定義使用了一個`Toast`展示信息。 Toast.makeText(ctx,"無法使用外部存儲,請設(shè)置權(quán)限以便使用。",Toast.LENGTH_SHORT).show() //**為了確保后續(xù)的流程繼續(xù)執(zhí)行,你需要在適當?shù)臅r候調(diào)用process的`onNext`或`onCancel`方法** process.onNext() //onNext()表示繼續(xù)后面的執(zhí)行,HaloPermission將打開系統(tǒng)應(yīng)用權(quán)限設(shè)置界面 //onCancel會取消流程的執(zhí)行,不會打開系統(tǒng)應(yīng)用權(quán)限設(shè)置界面,最終會回調(diào)onPermissionDenied方法 } }) .run()
如果你覺得HaloPermission打開的權(quán)限設(shè)置界面不是您所滿意的,你可以重寫SettingRender的getCustomSettingIntent方法提供一個Intent,如果返回null則將使用HaloPermission的默認方式打開:
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)限校驗規(guī)則
兩步即可實現(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)限校驗規(guī)則,因為HaloPermission會盡可能的去適配和兼容
5. 自定義請求方式
HaloPermission默認使用ShadowActivity的形式請求權(quán)限,當然只要你愿意,您可以使用Fragment的形式去實現(xiàn),HaloPermission本身也提供了Fragment的請求方式,但是最終去掉了這部分的實現(xiàn),因為對于Fragment的使用機制,如果使用不當,可能會出現(xiàn)一些奇怪的問題,我想這是你我都不愿看到的。同樣的,兩步即可實現(xiàn)自定義請求方式
//1. 創(chuàng)建自定義PermissionCaller class CustomCaller: PermissionCaller{ override fun requestPermission(ctx: Context, responder: PermissionResponder, vararg permision: String) { {可以仿造HaloPermission實現(xiàn),最終要在適當?shù)臅r候調(diào)用responder讓流程正常進行} } } //2. 使用自定義規(guī)則 HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) .{省略常規(guī)代碼} .run(CustomCaller())
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android運行時權(quán)限終極方案(PermissionX)
- Android超清晰6.0權(quán)限申請AndPermission
- android6.0權(quán)限動態(tài)申請框架permissiondispatcher的方法
- Android EasyPermissions官方庫高效處理權(quán)限相關(guān)教程
- Android.permission.MODIFY_PHONE_STATE權(quán)限問題解決辦法
- 詳解Android權(quán)限管理之RxPermission解決Android 6.0 適配問題
- Android權(quán)限管理之Permission權(quán)限機制及使用詳解
- Android權(quán)限操作之uses-permission詳解
- Android 權(quán)限(permission)整理
- Android開發(fā)之permission動態(tài)權(quán)限獲取詳解
相關(guān)文章
Android 中TextView的使用imageview被壓縮問題解決辦法
這篇文章主要介紹了Android 中TextView的使用imageview被壓縮問題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-04-04Android 多種dialog的實現(xiàn)方法(推薦)
下面小編就為大家分享一篇Android 多種dialog的實現(xiàn)方法(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01基于Manifest.xml中不要出現(xiàn)重復(fù)的uses permission的說明
本篇文章對Manifest.xml中不要出現(xiàn)重復(fù)的uses permission進行了介紹。需要的朋友參考下2013-05-05Android 2.3.7.r1 camera錄像過程中按menu菜單鍵時會停止錄像
android GB版本的camera錄像過程中按“菜單”鍵會停止錄像,改成錄像時按menu鍵不做處理,具體修改方法如下,感興趣的朋友可以參考下哈2013-06-06Android應(yīng)用開發(fā)中控制反轉(zhuǎn)IoC設(shè)計模式使用教程
這篇文章主要介紹了Android應(yīng)用開發(fā)中控制反轉(zhuǎn)IoC設(shè)計模式使用教程,IoC其實更常被理解為一種依賴注入的模式,用來分解業(yè)務(wù)層降低耦合,需要的朋友可以參考下2016-04-04