gpt4 book ai didi

android - 通过无障碍服务使用 UiAutomation

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:13:42 25 4
gpt4 key购买 nike

我正在为 Android 编写无障碍服务,旨在为 body 残障人士提供不同的替代方案来控制设备,例如,使用开关、扫描、头部跟踪等。

目前,为了在应用程序界面上执行实际操作,我们使用辅助功能 API,基本上是 AccessibilityNodeInfo.performAction() 方法。这在大多数情况下都可以正常工作,但我们发现了一些重要的限制:

  • 大多数键盘 (IME) 都不起作用。我们只在 Lollipop (API 22) 上使用 Google 键盘取得了成功,并且必须使用 AccessibilityService.getWindows() .对于较低的 API 版本,我们必须开发一个特殊的键盘(无疑不是最佳解决方案)。
  • 大多数游戏都无法访问。点。它们不导出 AccessibilityNodeInfo 树。
  • Web 导航不实用(无法滚动等问题)。

一种解决方案是使用不同的 API 来执行操作,而 android.app.UiAutomation 似乎可以满足此目的。根据文档“它还允许注入(inject)任意原始输入事件,模拟用户与键盘和触摸设备的交互”,这正是我正在寻找的;尽管我知道 UiAutomation 旨在用于测试目的(并且可能还没有为生产质量代码做好准备)并且也许在不同设备上的行为可能不同。我也明白这样的 API 可能 be a security hole如果有任何应用程序可以使用它。但允许无障碍服务使用 UiAutomation 似乎是合理的,因为 AccessibilityNodeInfo.performAction() 提供了类似的“权力”。

因此,我在无障碍服务中尝试了以下操作:

 Instrumentation i = new Instrumentation();
UiAutomation automation = i.getUiAutomation();

但是 getUiAutomation() 总是返回 null。

是否有任何选项可以在无障碍服务中使用 UiAutomation(或类似的 API)?

顺便说一句:root 设备不是我们的选择,所以我们不能 inject events through the screen driver

最佳答案

我回答我自己的问题。

自 Nougat (API 24) 以来,以编程方式在其他应用程序上执行操作的方法是使用无障碍服务和 AccessibilityService#dispatchGesture方法。

关于android - 通过无障碍服务使用 UiAutomation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30942775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com