使用无障碍服务AccessibilityService,遇到点击失败的问题,节点和它的父节点实际上都是可以点击的,但代码中给他们执行点击操作时只有父节点能成功,也试过模拟点击事件、延迟点击、多点触摸等方式,通通不起作用


使用无障碍服务AccessibilityService,遇到点击失败的问题,节点和它的父节点实际上都是可以点击的,但代码中给他们执行点击操作时只有父节点能成功,也试过模拟点击事件、延迟点击、多点触摸等方式,通通不起作用


阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
你使用了AccessibilityService来模拟点击操作,但是遇到了点击失败的问题,父节点可以点击,但是子节点不能点击。这可能是因为AccessibilityService的点击事件处理机制不同于正常的点击事件。
可以尝试以下解决方案:
performClick()方法来模拟点击事件,这个方法可以模拟出正常的点击事件。AccessibilityNodeInfo node = ...;
node.performClick();
dispatchKeyEvent()方法来模拟点击事件,这个方法可以模拟出键盘事件。AccessibilityNodeInfo node = ...;
KeyEvent event = KeyEvent.obtain(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER);
node.dispatchKeyEvent(event);
event.recycle();
performAction()方法来模拟点击事件,这个方法可以模拟出特定的操作。AccessibilityNodeInfo node = ...;
node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
AccessibilityManager来激活它。AccessibilityManager accessibilityManager = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
if (!accessibilityManager.isEnabled()) {
accessibilityManager.setEnabled(true);
}
getRootInActiveWindow()方法来获取当前活动窗口,然后使用findAccessibilityNodeInfosByClassName()方法来获取指定的节点。AccessibilityNodeInfo node = ...;
AccessibilityNodeInfo root = getRootInActiveWindow();
List<AccessibilityNodeInfo> nodes = root.findAccessibilityNodeInfosByClassName("android.widget.Button");
for (AccessibilityNodeInfo n : nodes) {
if (n.equals(node)) {
// 执行点击操作
}
}
如果以上解决方案都不能解决问题,可以提供更多的代码和日志信息,以便更好地帮助你解决问题。