UiAutomator 求助:如何在窗口类型为 TYPE_SYSTEM_OVERLAY 的界面上获取控件信息并执行操作

henrywoo. · 2018年05月18日 · 1390 次阅读

问题

在项目中,app 是一个 service 应用,在 service 中通过 WindowManager 的 addView 方式,将界面绘制在最顶层
窗口类型为 TYPE_SYSTEM_OVERLAY

当我从 Launcher 启动这个 service 后,该界面全屏显示在最上层。我通过 uiautomatorviewer 尝试获取界面信息,发现拿
到的是 Launcher 这一层界面的内容。

我尝试在代码里通过 UiDevice.dumpWindowHierarchy(file) 的方式去获取,仍然只拿到 Launcher 的界面元素。

研究了一下 uiautomator 获取控件的代码,发现它会从 Active_window 中拿根节点,而对 Active_window 的描述是
“An active window is the one the user is currently touching or the window has input focus and the user is not touching any window.”

网上查到 system_overlay 的窗口不能取得焦点,而当我通过代码 dump 的方式去获取控件元素时,我用手指 touch 屏幕,
也仍然是拿到其下一层窗口的控件元素(😑~~~),而且我想就算能拿到,那 uiautomator 在执行的时候肯定也会找不到控件的,
我总不能一直 touch 住吧哈哈哈....

所以求助一下大家,除了直接通过坐标发送 touch 事件的办法外,有没有其他思路能够通过 id 方式去操作这一层的控件的?

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册