android自定义权限注解,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()

关于此回调的触发说明:

如果app之前请求过该权限,被用户拒绝, 这个方法回回调。

如果用户之前拒绝权限的时候勾选了对话框中”Don't ask again”的选项,那么这个方法不会回调

如果设备策略禁止应用拥有这条权限, 这个方法也不会回调

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值