是否可以使用辅助功能服务在屏幕上找到按钮或文本的坐标,然后模拟在该按钮或文本字段上的点击,但不需要触摸该字段,就像您需要触摸Android TalkBack中的字段才能听到读取?
例如,是否可以像这样使用辅助功能服务:
这在Android上有可能吗?
发布于 2022-06-22 22:13:46
我想我写了一个你可能会觉得有趣的服务
请记住以下几点:
RecyclerView
的一个问题,因为在用户滚动时,ViewHolder
被用于不同的元素。但是,您可以在可访问性服务中这样做:
// To find a node by *fully qualified id*
rootInActiveWindow.findAccessibilityNodeInfosByViewId("id criteria")
// To find a node by text criteria
rootInActiveWindow.findAccessibilityNodeInfosByText("text criteria")
用id准则搜索时
通过完全限定视图id的资源名查找AccessibilityNodeInfos,其中一个完全限定的id来自from "package:id/id_ resource _ name“。例如,如果目标应用程序的包是"foo.bar“,而id资源名称是"baz",则完全限定的资源id是"foo.bar: id /baz".Note:这个API的主要用途是用于UI测试自动化,并且为了报告完全限定的视图id,如果客户端在配置AccessibilityService时必须设置AccessibilityServiceInfo#FLAG_REPORT_VIEW_IDS标志,则报告完全限定的视图id。
用文本标准搜索时
通过文本查找AccessibilityNodeInfos。匹配是不区分大小写的容器。搜索相对于此信息,即此信息是遍历树的根。
两人的说明:
注意:如果这个视图层次结构有一个通过SurfaceView嵌入另一个视图层次结构的SurfaceView#setChildSurfacePackage,那么这个API将无法在嵌入的视图层次结构上找到视图的节点。这是因为视图不知道嵌入的层次结构。相反,您可以遍历所有的子节点以找到节点。
单击元素:
fun click(long: Boolean = false) {
someAccessibilityNodeInfoObject.performAction(
if (long) ACTION_LONG_CLICK
else ACTION_CLICK
)
}
如果您真的热衷于获取节点的屏幕坐标,那么始终可以使用getBoundsInScreen方法,但是您必须做所有的数学和其他工作,这比需要做的要困难得多。但我在巴什做的在执行adb uiautomator dump
和解析adb uiautomator dump
时,去掉了我想要的节点的边界,只是要小心使用uiautomator dump
会禁用可访问性服务。
MIDX= START_X + ((END_X - START_X) / 2)
MIDY= START_Y + ((END_Y - START_Y) / 2)
https://stackoverflow.com/questions/72495019
复制相似问题