Android无障碍服务一次与众多交换机交互

问题描述 投票:1回答:1

我想知道是否存在一种使用辅助功能一次打开/关闭众多开关的好方法。

所以基本上我有一个视图,其中包含一个RecyclerView,其中包含约40个开关,我需要一种方法来尽可能快地打开/关闭它们。这是我尝试过的。

public static void scrollView(final AccessibilityNodeInfo nodeInfo) {

    if (nodeInfo == null) return;

    if (nodeInfo.isScrollable()) {
        if (nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD)) {
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    turnOffSwitches(nodeInfo);
                }
            }, 1000);

        }
    }
}

public static void turnOffSwitches(final AccessibilityNodeInfo parentView) {
    if (parentView.getClassName().equals("android.support.v7.widget.RecyclerView")) {
        for (int i = 0; i < parentView.getChildCount(); i++) {
            final AccessibilityNodeInfo child = parentView.getChild(i);
            final Boolean isLasteOne = (i == parentView.getChildCount() - 1);
            child.performAction(AccessibilityNodeInfo.ACTION_CLICK);
            if (isLasteOne) {
                scrollView(parentView);
            }
        }
    }
}

我什至尝试在ACTION_CLICK动作之间引入延迟,这虽然有所帮助,但不能完全解决我的问题。因此,我遇到的问题是并非所有开关都会关闭。看来此操作的完成速度是有限的。所以我的问题是,是否有更好的方法可以做到这一点?

android accessibilityservice android-accessibility
1个回答
0
投票

ACTION_SCROLL_FORWARD-这不是分页,只是滚动整个元素矩阵的一部分,并且某些可见元素已经切换到状态,因此在您的下一个循环中,您尝试单击已被剪切的元素(下一个可见区域与上一个重叠) )

  1. 要么检查状态的开/关-如果在更改视图之前视图尚未处于所需的状态

  2. 或检查event.getScrollX()和event.getScrollY(),如果尚未在这些范围内执行操作

© www.soinside.com 2019 - 2024. All rights reserved.