我正在为Android编写一项辅助功能服务,旨在为身体残障人士提供不同的选择来控制设备,例如使用开关,扫描,头部跟踪等。
当前,为了在应用程序界面上执行实际操作,我们使用了可访问性API,基本上是AccessibilityNodeInfo.performAction()方法。在大多数情况下,这种方法都能正常工作,但是我们发现了一些重要的限制:
一种解决方案是使用其他API来执行操作,而android.app.UiAutomation似乎可以满足要求。根据文档,“这还允许注入任意原始输入事件,以模拟用户与键盘和触摸设备的交互”。尽管我了解UiAutomation仅用于测试目的(并且可能尚未准备好生产质量代码),并且在不同设备上的表现可能不同。我也了解,如果任何应用程序可以使用此API,那么它可能是一个安全漏洞。但是,鉴于AccessibilityNodeInfo.performAction()提供类似的“功能”,允许无障碍服务使用UiAutomation似乎是合理的。
因此,我在无障碍服务中尝试了以下操作:
Instrumentation i = new Instrumentation();
UiAutomation automation = i.getUiAutomation();
但是getUiAutomation()始终返回null。
辅助功能服务中是否可以使用UiAutomation(或类似的API)?
顺便说一句:植根设备不是我们的选择,因此我们无法通过屏幕驱动程序注入事件
我回答我自己的问题。
从Nougat(API 24)开始,以编程方式对其他应用程序执行操作的方法是使用可访问性服务和AccessibilityService#dispatchGesture方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句