安卓权限申请处理框架Android-UsesPermission (2)

整个类里面最核心,逻辑最复杂的一个方法(虽然默认实现只有3行代码)。此方法控制着整个权限请求的流程,弹不弹提示,尝不尝试重新申请,都是它说了算。

授权请求发起前会回调此方法,用来生成设置提示信息,也是来决定是否提示和进行授权。如果返回null,代表不进行下下一步操作;返回字符串会进行提示然后进行请求授权。注意:这个方法,会有不同权限进行多次调用;如果用户选点击了取消默认这些权限不会再调起请求(可重写onCancelTips修改此行为)。

默认行为为:

先直接发起权限申请 viewTipsCount=0

普通权限(非永久拒绝)如果被拒绝(非永久拒绝),后续会安排再弹框申请一次(防误选)。

如果结果有被永久拒绝,这部分权限会和后面的永久权限申请一起弹框处理。

弹一次框处理被永久拒绝的权限(弹一次够了),跳转到App授权系统设置界面 viewTipsCount=1+

@param viewTipsCount 0-n 是第几次准备弹提示框。 0:申请前的引导提示,返回null代表不弹提示,直接调起授权。 注意:第0次包含所有权限(不含带自定义授权请求的权限),无法区分是不是永久拒绝的权限。 1+:被永久拒绝的权限申请,或普通权限上一轮被拒。 注意:为1的时候,如果权限带自定义的授权请求方式,就算返回了null,也会进行提示并调用授权请求。 @param permissions 被拒绝的权限列表 @param isFinal 这个权限列表是不是永久被拒绝的权限,true是,false为未永久拒绝 @return 返回提示信息;返回值为null不进行申请;为空字符串时自动生成合理的提示。 字符串内容支持特定占位符: {Auto}:用自动生成提示内容替换 {Names}:自动替换被拒绝的权限名称 如:'xx"{Names}"xx' => 'xx"权限名1,权限名2,权限名3"xx' String onCancelTips(viewCancelCount,permissions,isFinal)

不建议重写,取消了也弹提示真不友好,弹出了提示时,用户点击了取消时的额外提示信息。返回null彻底不再调起提示,默认就是返回null。这个回调的用法和onTips一模一样,只是这个仅仅作用在点击了取消时。注意:重写这个方法应该慎重,最多viewCancelCount几次后就返回null,避免出现无法取消永远弹框的问题。

viewCancelCount 1-n 当前这次请求是第几次取消。

String onTipsDialogView(tips,isCancel,viewTipsCount,permissions,isFinal,okCall,cancelCall)

授权提示弹框,重写此方法自定义弹框行为,默认使用系统AlertDialog弹框。只要求必须回调okCall,cancelCall中的任何一个,怎么显示界面、显示多少个界面 -> 随意。

Permission类文档

import ecomm.lib_comm.permission.Permission;

这个类封装了8.0版本的危险权限列表,并且提供了对应的权限名称映射。

权限列表

使用过程中推荐使用这个类里面定义的权限,比如Permission.CAMERA。如果用Manifest.permission.CAMERA也可以,他们是等价的。

静态方法 String QueryName(permission)

查询权限对应的名称,比如Permission.CAMERA对应的名称为相机。

String QueryNames(permissions)

获取权限名称列表,如权限名1,权限名2,权限名3,此方法用于方便的生成授权提示信息。

最佳实践 使用默认实现

不重写onTips即为默认实现。

请求授权时直接弹出请求,用户如果点了拒绝(非永久),后续还会弹一次提示,防止误点。如果有被永久拒绝的权限,会弹提示,转到系统设置。

授权前先提示

在调起授权前先弹提示,其他行为和默认实现一样。重写onTips方法:

@Override protected String onTips(int viewTipsCount, @NonNull ArrayList<String> permissions, boolean isFinal) { if(viewTipsCount<=1) { return ""; } return null; } 不授权永远弹提示

如果不授权功能是没法使用的场景,可以一直弹提示,直到用户点击了取消为止(可重写onCancelTips让无法取消,但不建议)。重写onTips方法:

protected String onTips(int viewTipsCount, @NonNull ArrayList<String> permissions, boolean isFinal) { if(viewTipsCount>0) {//如果需要授权调起前先提醒,直接把这个if去掉就行了 return ""; } return null; } 静默方式授权

如果权限被拒绝,不弹任何提示,也不跳转权限系统设置界面。仅仅用来调起授权请求。但对于需要引导才能进行权限设置的除外(如安装、悬浮窗权限)。重写onTips方法:

protected String onTips(int viewTipsCount, @NonNull ArrayList<String> permissions, boolean isFinal) { return null; } 自定义提示界面

默认实现在弹提示的时候使用的是系统AlertDialog弹框,可重写onTipsDialogView方法来使用自己的提示界面。比如HiPermission的这种蛮美观友好的界面:

安卓权限申请处理框架Android-UsesPermission

这个库不提供界面实现,需要自行实现。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzdyj.html