ADB识别手机系统弹授权框-如何处理多重弹框叠加和重叠问题
ADB识别手机系统弹授权框-如何处理多重弹框叠加和重叠问题
--蓝牙电话SDK自动部署
-
上一篇:手机App-插入USB时自动授权点击确定按钮-使系统弹出框自动消失
下一篇:编写中。
一、前言
我们在上一篇《手机App-插入USB时自动授权点击确定按钮-使系统弹出框自动消失》文章中,已经实现了应用App中自动化点击外置USB插入时弹出的授权确认框。
自动化点击弹出授权窗口并自动确认的过程中,有一个大问题无法被忽视,即:权限调用是异步操作,在调用时可能会依次调用了多个权限请求,Android系统会依次弹出多个不同的授权框,进行手动授权确认。
由于不同的厂商和定制版安卓的存在,且市面上同时存在高低不同的Android版本的手机。在同样的授权请求上,有些手机不需要弹某个权限的弹窗,有些手机弹窗的文字按钮与其它主流厂商的不一样,有的弹窗的位置和方式不同。这些种种问题都困扰着我们。
加上蓝牙电话方案要依赖外置的USB硬件,插入的时间和应用App启动的时间的不同,也会形成各种有序/无序的系统弹窗覆盖、叠加的显示效果。(对于真人手动点击当然无所谓,弹啥框就随手按提示来点击内容就行。自动化要如何去做?)
问题主要包括以下方面:
1、权限调用是异步操作,通常为了保障自动点击能顺利进行,自动点击前需要先休眠一段时间后,再做识别和点击操作。
2、有时再某个异步请求调用之后,其它的事件触发导致弹框被叠加,可能导致某个底部的弹窗无法被自动点击脚本依照顺序点击得到。
3、某一组弹窗相互之间,可能是依次弹出的(比如首次运行App授权时),需要对这种有序或无序(乱序)状态的弹框进行处理。
4、不同的手机厂商和不同Android版本之间的弹窗与否和弹窗数量之间存在差异(比如某个Android版本就不需要对通讯录做授权弹窗,比如小米手机对蓝牙授权会先弹通知栏提示-只有点击了通知栏消息的“允许”按钮才会出现授权弹窗)
5、由于蓝牙电话方案依赖外置USB硬件,什么时候插入,弹的框是否会覆盖别的弹窗,覆盖后原来的弹窗要如何实现依次点击?这些都是需要值得考虑的问题。
(本文主要阐述方案原理和实现机理,后续的篇章中会尝试将其实现方案整合到拨号器SDK的应用中,进行功能的整合与使用)
体验和下载地址:
智能拨号器App:http://120.78.211.195:8060/Dialer.apk
拨号器SDK示例app:http://120.78.211.195:8060/sdk/SdkDemo.apk
USB蓝牙配件购买路径(参考):https://item.taobao.com/item.htm?_u=pk10l4ccbcd&id=649368472986
- 二、系统弹出框的互相覆盖的样例
由于Android授权弹出框是由应用App主动去触发的,因此理论上应用程序本身理应能够识别出不同弹出框的先后顺序(上一个权限没有返回请求成功,就不要调用下一个权限请求即可)。但由于存在外置USB配件拔插的场景,作为应用App,你很难约束用户一定要怎么做、一定不能怎么做(毕竟还是以人为本、用户行为优先)。
这种情况下假如原先正在弹出授权提示窗口,还没有点击的时候突然插入USB,新的USB授权框覆盖掉旧的提示窗口。这种场景下,原有的自动确认点击逻辑就算执行多次也很难把所有的弹出框消除干净。如下图所示:
这就要求我们对【自动点击异步弹出框】的算法逻辑进行调整,优化的核心在于“异步操作的休眠时间”。即:新弹窗的消除逻辑,利用堆栈的原理,后进先出,逐层确认消除弹窗应该具备可行性。这种情况下要优化堆栈中不同自动脚本的休眠时间和调用顺序。
- 三、依次确认消除弹出框的原理
在权限请求的异步操作中,我们可以利用堆栈的原理,后进先出,逐层确认消除弹窗。但是由于异步时间的原因,针对无序/乱序的请求场景,调用方后调用的异步权限请求,未必就能先弹出权限框。此时建议对堆栈中所有的自动化点击的内容列表做识别,任何一组匹配的都做点击处理,如下图所示:
如图中的内容所示,在应用App第一次运行过程中插入外置USB蓝牙配件,会在不同的授权对话框窗口上弹出新的蓝牙发现允许的权限框。为了达到依次消除的效果,应当在“允许”蓝牙发现后,再次级联“应用运行中同意”读写通讯录信息的权限。
- 四、针对通知栏提示消息的处理
针对部分小米和红米手机,蓝牙配对请求的权限会先弹出通知栏消息,只有先点击该消息的“配对和连接”按钮,才会弹出【蓝牙配对】的权限框。
应用App需要寻找到能够自动发现和点击通知栏消息的办法,并在这个基础之上做级联的配对按钮点击的操作。
- 五、重点和难点
如前述章节所述,难点主要有三个:
1、是否每个弹窗界面的异步休眠时间是否相同?要等待多久再进行检测和识别?中途是否会被其它弹窗界面给覆盖导致无法识别成功?
2、不同厂商和Android版本的匹配差异,有的权限在某些厂商或安卓版本不需要弹窗,但在其它手机是需要弹窗。自动化点击脚本如何进行适配和融合?
3、如果弹窗之间是有序或无序/乱序,对自动化点击的操作是否存在结果上的差异?
因此,只要把控和平衡好上述的三点,并根据这样的使用场景适配出来的自动化点击逻辑,应该就能很好的满足本次研究主题的【多重弹框叠加和重叠问题】的场景了。
- 六、总结
本文针对【多重弹框叠加和重叠问题】进行理论上的探讨,尝试发现和寻觅到一种标准化的办法来针对性的处理这种场景的方式。
由于蓝牙电话方案依赖外置USB硬件的拔插,因此权限请求和原有应用App的常规权限请求之间,也确实存在一定的重叠的冲突。这个在后续应用App的逻辑和功能实现中需要着重进行考虑。