栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android权限HaloPermission详细使用

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android权限HaloPermission详细使用

1. 常规使用

请求一个权限,然后接收结果回调

HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
      .setListener(object: PermissionListener{
 override fun onPermissionDenied(permissions: List) {
   {your code for deny}
 }
 override fun onPermissionGrand(permissions: List) {
   {your code for grand}
 }
      }).run()

请求多个权限

HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE)
      .{省略代码}
      
    //or
    
    val permissions:Array = arrayOf("","")
    HoloPermission.with(this,*permissions)
      .{省略代码}

只关心权限被允许(未被允许)的回调

HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
      .setGrandAction(object:GrandAction{
 override fun onPermissionGrand(permissions: List) {
   {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, process: RationaleRender.Process) {
//自定义使用了一个`Toast`展示信息。
Toast.makeText(ctx,"为了确保功能的正常使用,请允许接下来的权限请求申请。",Toast.LENGTH_SHORT).show()

//**为了确保后续的流程继续执行,你需要在适当的时候调用process的`onNext`或`onCancel`方法**
process.onNext()

//onNext()表示继续后面的执行
//onCancel会取消流程的执行,并且会最终回调onPermissionDenied方法
     }
   })
   .run()

关于此回调的触发说明:

  1. 如果app之前请求过该权限,被用户拒绝, 这个方法回回调。
  2. 如果用户之前拒绝权限的时候勾选了对话框中”Don't ask again”的选项,那么这个方法不会回调
  3. 如果设备策略禁止应用拥有这条权限, 这个方法也不会回调

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, process: SettingRender.Process) {
//自定义使用了一个`Toast`展示信息。
Toast.makeText(ctx,"无法使用外部存储,请设置权限以便使用。",Toast.LENGTH_SHORT).show()

//**为了确保后续的流程继续执行,你需要在适当的时候调用process的`onNext`或`onCancel`方法**
process.onNext()

//onNext()表示继续后面的执行,HaloPermission将打开系统应用权限设置界面
//onCancel会取消流程的执行,不会打开系统应用权限设置界面,最终会回调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, process: SettingRender.Process) {
{省略的代码}
     }

     //自定义SettingIntent
     override fun getCustomSettingIntent(ctx: Context): Intent? {
   return super.getCustomSettingIntent(ctx)
     }
   })
   .run()

4. 自定义权限校验规则

两步即可实现

   //1. 创建自定义PermissionChecker
    class CustomChecker:PermissionChecker{
      override fun isPermissionGranted(ctx: Context, permission: String): Boolean {
 {使用你的规则}
      }
    }
    
    //2. 使用自定义规则
    HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
      .{省略常规代码}
      .run(CustomChecker())

除非你非常有把握,否则不建议使用自定义权限校验规则,因为HaloPermission会尽可能的去适配和兼容

5. 自定义请求方式

HaloPermission默认使用ShadowActivity的形式请求权限,当然只要你愿意,您可以使用Fragment的形式去实现,HaloPermission本身也提供了Fragment的请求方式,但是最终去掉了这部分的实现,因为对于Fragment的使用机制,如果使用不当,可能会出现一些奇怪的问题,我想这是你我都不愿看到的。同样的,两步即可实现自定义请求方式

    //1. 创建自定义PermissionCaller
    class CustomCaller: PermissionCaller{
override fun requestPermission(ctx: Context, responder: PermissionResponder, vararg permision: String) {
  {可以仿造HaloPermission实现,最终要在适当的时候调用responder让流程正常进行}
}
    }
    
    //2. 使用自定义规则
    HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
      .{省略常规代码}
      .run(CustomCaller())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/156405.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号