国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android權(quán)限HaloPermission詳細使用

2019-12-12 01:02:05
字體:
供稿:網(wǎng)友

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í)行,你需要在適當(dāng)?shù)臅r候調(diào)用process的`onNext`或`onCancel`方法**              process.onNext()              //onNext()表示繼續(xù)后面的執(zhí)行              //onCancel會取消流程的執(zhí)行,并且會最終回調(diào)onPermissionDenied方法            }          })          .run()

關(guān)于此回調(diào)的觸發(fā)說明:

  1. 如果app之前請求過該權(quán)限,被用戶拒絕, 這個方法回回調(diào)。
  2. 如果用戶之前拒絕權(quán)限的時候勾選了對話框中”Don't ask again”的選項,那么這個方法不會回調(diào)
  3. 如果設(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í)行,你需要在適當(dāng)?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)限,當(dāng)然只要你愿意,您可以使用Fragment的形式去實現(xiàn),HaloPermission本身也提供了Fragment的請求方式,但是最終去掉了這部分的實現(xiàn),因為對于Fragment的使用機制,如果使用不當(dāng),可能會出現(xiàn)一些奇怪的問題,我想這是你我都不愿看到的。同樣的,兩步即可實現(xiàn)自定義請求方式

    //1. 創(chuàng)建自定義PermissionCaller    class CustomCaller: PermissionCaller{       override fun requestPermission(ctx: Context, responder: PermissionResponder, vararg permision: String) {         {可以仿造HaloPermission實現(xiàn),最終要在適當(dāng)?shù)臅r候調(diào)用responder讓流程正常進行}       }    }        //2. 使用自定義規(guī)則    HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)      .{省略常規(guī)代碼}      .run(CustomCaller())

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 云阳县| 铁力市| 旺苍县| 珠海市| 泾川县| 阿拉善盟| 大渡口区| 新安县| 普陀区| 慈利县| 县级市| 翼城县| 突泉县| 巩留县| 杂多县| 保靖县| 垦利县| 庐江县| 天津市| 紫阳县| 黄石市| 海原县| 即墨市| 临夏县| 如东县| 乳山市| 松潘县| 英吉沙县| 昆明市| 汉源县| 岑巩县| 龙川县| 彭泽县| 阳原县| 襄樊市| 大城县| 广宗县| 克拉玛依市| 西乡县| 阿鲁科尔沁旗| 朝阳县|