private void click() {
Log.d(TAG, String.format("Click [%d, %d]", cursorLayout.x, cursorLayout.y));
- AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo == null) return;
AccessibilityNodeInfo nearestNodeToMouse = findSmallestNodeAtPoint(nodeInfo, cursorLayout.x, cursorLayout.y + 50);
if (nearestNodeToMouse != null) {
logNodeHierachy(nearestNodeToMouse, 0);
nearestNodeToMouse.performAction(AccessibilityNodeInfo.ACTION_CLICK);
nodeInfo.recycle();
我正在使用 AccessibilityNodeInfo nodeInfo = getRootInActiveWindow(); 我在这里得到空值
I try
view.createAccessibilityNodeInfo();
通过这些方法,我得到了节点。但我得到了一个错误,即无法到达。
view.getRootView().createAccessibilityNodeInfo();
getRootInActiveWindow()给出空值
0
人关注
4
个评论
你能分享你的
无障碍服务配置
file contents?
yes where to send
你可以修改这个问题,或者放一个git仓库的链接 :)
我附上了可及性xml和服务menifiest文件的屏幕截图。
Nripender Kumar
发布于
2022-12-07
2
个回答
Quintin Balsdon
发布于
2022-12-26
0
人赞同
从评论中,我似乎无法让你显示你的服务配置的内容......我不想用我的来迷惑你,但我觉得这个例子可能更有成效。
在你的清单中,你需要有一个
accessibility_service_config
文件被引用。名称并不重要。
<service
android:name="..."
android:enabled="true"
android:label="..."
android:description="..."
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
那么res/xml/accessibility_service_config.xml
就需要按照以下的思路来进行
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityFeedbackType="feedbackSpoken"
android:accessibilityFlags="flagDefault|flagReportViewIds"
android:accessibilityEventTypes="typeAllMask"
android:canPerformGestures="false"
android:canRetrieveWindowContent="true"
android:description="..."
可能是你只需要把canRetrieveWindowContent
设置为真。文件:
属性是无障碍服务是否希望能够检索活动窗口的内容。这个设置在运行时不能被改变。
要求允许设置#无障碍服务Info#FLAG_RETRIEVE_INTERACTIVE_WINDOWS旗帜。
可以是一个布尔值,如 "真 "或 "假"。
也可能是需要的内容,至少android:accessibilityFlags="flagReportViewIds"
。
根据文件:
这个标志要求可访问性节点信息(AccessibilityNodeInfos由一个无障碍服务包含源视图的ID。源视图的id将是一个完全合格的资源名称,形式为 "package:id/name",例如 "foo.bar:id/my_list",它对UI测试自动化很有用。这个标志在默认情况下是不设置的。
我强烈建议你正确配置你的服务--我不建议逐字复制和粘贴我的服务配置。
我尽力去获取窗口内容,但我仍然没有得到。我在这里分享我的github
github.com/mkumar7404508129/accesibility
请检查一下,告诉我这个错误。
Quintin Balsdon
发布于
2022-12-26
0
人赞同
你的服务配置XML是畸形的。
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"> <-- the angle bracket shouldn't be here -->
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault|flagReportViewIds"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"
android:accessibilityFeedbackType="feedbackAllMask"
android:notificationTimeout="200"
android:packageNames="com.example.accesibility"
android:canRequestEnhancedWebAccessibility="true"
</accessibility-service>
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault|flagReportViewIds"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"
android:accessibilityFeedbackType="feedbackAllMask"