Android权限HaloPermission详细使用
1.常规使用
请求一个权限,然后接收结果回调
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.setListener(object:PermissionListener{
overridefunonPermissionDenied(permissions:List){
{yourcodefordeny}
}
overridefunonPermissionGrand(permissions:List){
{yourcodeforgrand}
}
}).run()
  
请求多个权限
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE)
.{省略代码}
//or
valpermissions:Array=arrayOf("","")
HoloPermission.with(this,*permissions)
.{省略代码}
 
只关心权限被允许(未被允许)的回调
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.setGrandAction(object:GrandAction{
overridefunonPermissionGrand(permissions:List){
{yourcodeforgrand}
}
}).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{
overridefunshow(ctx:Context,permission:List,process:RationaleRender.Process){
//自定义使用了一个`Toast`展示信息。
Toast.makeText(ctx,"为了确保功能的正常使用,请允许接下来的权限请求申请。",Toast.LENGTH_SHORT).show()
//**为了确保后续的流程继续执行,你需要在适当的时候调用process的`onNext`或`onCancel`方法**
process.onNext()
//onNext()表示继续后面的执行
//onCancel会取消流程的执行,并且会最终回调onPermissionDenied方法
}
})
.run()
 
关于此回调的触发说明:
- 如果app之前请求过该权限,被用户拒绝,这个方法回回调。
 - 如果用户之前拒绝权限的时候勾选了对话框中”Don'taskagain”的选项,那么这个方法不会回调
 - 如果设备策略禁止应用拥有这条权限,这个方法也不会回调
 
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{
overridefunshow(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{
overridefunshow(ctx:Context,permission:List,process:SettingRender.Process){
{省略的代码}
}
//自定义SettingIntent
overridefungetCustomSettingIntent(ctx:Context):Intent?{
returnsuper.getCustomSettingIntent(ctx)
}
})
.run()
 
4.自定义权限校验规则
两步即可实现
//1.创建自定义PermissionChecker
classCustomChecker:PermissionChecker{
overridefunisPermissionGranted(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
classCustomCaller:PermissionCaller{
overridefunrequestPermission(ctx:Context,responder:PermissionResponder,varargpermision:String){
{可以仿造HaloPermission实现,最终要在适当的时候调用responder让流程正常进行}
}
}
//2.使用自定义规则
HoloPermission.with(this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.{省略常规代码}
.run(CustomCaller())
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。