当前位置: 首页 > news >正文

ADB识别手机系统弹授权框包含某段文字-并自动点击确定按钮

ADB识别手机系统弹授权框包含某段文字-并自动点击确定按钮

--蓝牙电话App自动部署

  • 上一篇:手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席

    下一篇:编写中。


    一、前

蓝牙电话方案中,我们提供了将手机通话的语音拦截后转发到局域网坐席的能力。但在手机App的安装和使用过程中,由于Android系统的特性,我们总是要弹出很多的授权框,然后不停的去点“确认”和“允许”。在App安装时首次启动如此、在后续app运行过程中的蓝牙扫描-配对绑定-连接的过程以及USB模块拔插的过程同样如此。

有时,我们就在想:有没有一种办法,能够一劳永逸的实现让Android系统弹出的授权框、状态栏通知、悬浮通知消息等等系统级别的界面,我们普通App也能让它自动消失?(不弹出来,或者刚弹出来就直接识别后自动点击确认按钮使其消失?)

而这也是本篇章编写的由来,本文努力在Android系统的世界里,使用普通的手机App应用,尝试不同的道路,使app能够根据预设规则中已知的某些弹出框中可能存在某段文字,识别出对应的弹出框,并自动调用操作使其自动确认消失。

本文主要阐述方案原理和实现机理,后续的篇章中会尝试将其实现方案整合到拨号器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

  • 二、系统弹出框的多样性

弹出框的多样性主要包括下述两个方面:

1、App在运行过程中需要弹出或级联弹出多个授权框或提示框,都需要逐个去允许和确定。

2、不同厂商的型号的手机,普通应用App面临的弹框的样式、内容、位置均不同。

对于蓝牙SDK对应的App,在App首次运行并授予各种悬浮窗/SD卡/通知权限之后,正常运行期间涉及USB拔插和蓝牙连接的弹出框,界面大致如下图所示(以红米手机为例):

USB插入的授权框(非常重要,是蓝牙电话SDK是否能正常工作的关键)

如果手机没有开启蓝牙,会先弹出框提示开启蓝牙。如果应用App首次安装且App无法获取到本机蓝牙的MAC地址,则会弹出上图右侧的提示框,允许被扫描和发现获取手机蓝牙的MAC地址(这个MAC在之后的蓝牙绑定和连接中会用到)。

若USB蓝牙和手机蓝牙首次绑定,手机还会弹出一个状态栏消息,点击状态栏消息的“配对和连接”按钮后,才会弹出蓝牙的配对框(小米红米系列手机才弹状态栏消息,部分手机会直接弹出蓝牙配对框)。

这些Android系统的授权框和对话框都允许和确认后,手机App就可以正常使用了。后续拔插USB也只会弹出第一个图的【USB插入的授权框】,不会再弹出其它对话框了。

  • 三、Android弹框识别和自动确认原理

我们通过DeepSeek和豆包以及百度的广泛搜索,试了很多种方法,发现还是【adb shell uiautomator】的指令最为靠谱(而且也不需要什么特殊或复杂的权限),指令大致如下:

adb shell uiautomator dump /sdcard/window.xml

通过这个adb命令,可以将界面中元素的标题、resId、坐标位置等内容给一次性获取得到(唯有一个缺点是,命令执行需要约1秒左右的时间)。

uiautomator获取到的内容,展示效果如下图所示:

图示中我们可以通过标题的一部分内容“拨号器SDK”或resId来判断是否是我们预期的界面,如果匹配上则检索其“确定”按钮,并获取该按钮的bonds的区域。

之后调用【adb shell input tap x y】的指令,向Android手机发送点击事件,完成“确定”按钮的自动点击操作。如上图示中的按钮点击指令如下:(bounds最大值的x和y分别减1)

adb shell input tap 977 1339

整个命令在windows的识别和导出以及查找的指令,大致如下图所示:

如果是linux,则findstr直接改为grep即可。

  • 四、自动确认的关键点和难点

如前述章节所述,关键点在于不同的手机厂商的机型,弹出的框的文字描述和按钮可能会被厂商重写导致不一致。在这块上,估计要对不同机型的差异部分做适配。

同时,针对App不同的界面弹窗,我们尽量只自动确认某几个关键的授权框,毕竟自动检测和识别和还是会损耗手机性能和时间的。

在先决条件上,本次选型的方案,无论是【adb shell uiautomator】还是【adb shell input tap x y】指令,均基于adb来进行操作。此部分内容如需要在普通App上进行执行,还需要依赖我们前期做的文章《ADB连接专题-跨互联网adb连接到手机》中介绍的方式来做支撑。

  • 五、总结

本文将尝试探索Android系统弹出框的识别,并在普通App中增加自动确认使其消失的功能。借助ADB的控制指令,本文的方案可根据弹框标题或内容中包含某个关键字来进行预期弹框类型的判断,识别成功后将自动点击其“确定”或“允许”按钮。

通过在普通App中整合此类功能,可快速通过一些因Android授权弹框而阻塞App自动运行的过程,减少了人工行为的干预。在不改变手机操作系统和业务逻辑的情况下,能更大程度的减少操作复杂度。具有一定的现实意义。

相关文章:

  • HTTP/HTTPS与SOCKS5三大代理IP协议,如何选择最佳协议?
  • Nginx详解(三):ngx_http_rewrite_module模块核心指令详解
  • python同步mysql数据
  • 报错SvelteKitError: Not found: /.well-known/appspecific/com.chrome.devtools.json
  • macOS 安装 Grafana + Prometheus + Node Exporter
  • 命令模式,观察者模式,状态模式,享元模式
  • 支持selenium的chrome driver更新到137.0.7151.55
  • 俄罗斯无人机自主任务规划!UAV-CodeAgents:基于多智能体ReAct和视觉语言推理的可扩展无人机任务规划
  • 【读代码】BabyAGI:自我构建的自主代理框架深度解析
  • VR视角下,浙西南革命的热血重生​
  • spark-AQE/Tungsten介绍及其触发条件
  • 手机打电话时将对方DTMF数字转为RFC2833发给局域网SIP坐席
  • MongoDB(七) - MongoDB副本集安装与配置
  • 性能优化深度实践:突破vue应用性能
  • 机器学习数据降维方法
  • 【论文解读】DETR: 用Transformer实现真正的End2End目标检测
  • 【2025文博会现场直击】多图预警
  • WSL 开发环境搭建指南:Java 11 + 中间件全家桶安装实战
  • 甘特图 dhtmlxGantt.js UA实例
  • LVS-Keepalived高可用群集
  • 用jsp做的网站代码/太原网站推广排名
  • php做网站架构图/福州seo排名优化公司
  • 男女做吃动态网站/成都seo正规优化
  • 百度竞价排名收费标准/优化搜索曝光次数的方法
  • 自己弄个网站要多少钱/电商运营seo
  • 怎么做一个聊天软件/百度seo软件曝光行者seo