Android权限HaloPermission详细使用

 更新时间:2018年04月11日 11:02:59   作者:SupLuo  
这篇文章主要介绍了Android权限HaloPermission详细使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

1. 常规使用

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

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()

              //**为了确保后续的流程继续执行,你需要在适当的时候调用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<String>, 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<String>, 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())

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

相关文章

  • Android 中从屏幕左下角弹出Dialog动画效果的实现代码

    Android 中从屏幕左下角弹出Dialog动画效果的实现代码

    这篇文章主要介绍了Android 中从屏幕左下角弹出Dialog动画效果的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Android内存泄漏排查利器LeakCanary

    Android内存泄漏排查利器LeakCanary

    这篇文章主要为大家详细介绍了Android内存泄漏排查利器LeakCanary的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android上传文件到服务器的方法

    Android上传文件到服务器的方法

    这篇文章主要为大家详细介绍了Android上传文件到服务器的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 解析Android应用启动后自动创建桌面快捷方式的实现方法

    解析Android应用启动后自动创建桌面快捷方式的实现方法

    和IOS开发和Windows Phone开发相比,Android是开放的,Android上的开发也相对更加灵活,能够做很多事情。有的朋友会发现,在某些Android应用安装以后,第一次运行,就会在桌面创建快捷方式。这是如何做到的呢
    2013-05-05
  • Android隐藏顶部状态栏所遇到的问题

    Android隐藏顶部状态栏所遇到的问题

    本文给大家分享两种隐藏状态栏的方法及在实现的过程中遇到的坑,下面在本文中给大家做个总结,希望对大家学习android顶部状态栏知识有所帮助
    2016-11-11
  • Android开发中的MVC设计模式浅析

    Android开发中的MVC设计模式浅析

    这篇文章主要介绍了Android开发中的MVC设计模式浅析,本文讲解了对Android开发中的MVC设计模式的理解,需要的朋友可以参考下
    2015-06-06
  • init output stream初始化输出流源码分析

    init output stream初始化输出流源码分析

    这篇文章主要为大家介绍了init output stream初始化输出流源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Android中解决RecyclerView各种点击事件的方法

    Android中解决RecyclerView各种点击事件的方法

    这篇文章主要介绍了Android中解决RecyclerView各种点击事件的方法,完美解决RecyclerView点击事件、长按事件、子项点击事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android冷启动优化的3个小案例分享

    Android冷启动优化的3个小案例分享

    为了提高App的冷启动耗时,除了在常规的业务侧进行耗时代码优化之外,为了进一步缩短启动耗时,需要在纯技术测做一些优化探索,本期我们从类预加载、Retrofit 、ARouter方面进行了进一步的优化,感兴趣的同学跟着小编一起来看看吧
    2023-07-07
  • Android Bitmap详解及Bitmap的内存优化

    Android Bitmap详解及Bitmap的内存优化

    这篇文章主要介绍了Android Bitmap详解及Bitmap的内存优化的相关资料,Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件,需要的朋友可以参考下
    2017-03-03

最新评论