Android AccessibilityService пропускает событие onAccessibilityEvent при выполнении действия ACTION_SCROLL_FORWARD - PullRequest
0 голосов
/ 26 мая 2020

Я хотел бы получить все элементы в RecyclerView (в другом приложении, таком как FB).

Я использовал AccessibilityService и прокрутил RecyclerView, позвонив:

AccessibilityNodeInfo performAction (ACTION_SCROLL_FORWARD)

, но после этого событие onAccessibilityEvent было запущено.

Как я могу прокрутить RecyclerView, не вызывая события в onAccessibilityEvent?

RecyclerView обновляется самим приложением. Так посмотрите событие AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED, AccessibilityEvent.TYPE_VIEW_SCROLLED

Но вызов findItemAndClick () вызовет ACTION_SCROLL_FORWARD, ACTION_SCROLL_BACKWARD * 1020Event_SCROLL_BACKWARD * * 1020, событие Accessibility_EDTINE_VIND_SU_UA_1020, * 1020 - inf *

Спасибо

@Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        AccessibilityNodeInfo source = event.getSource();
        String className = event.getClassName().toString();
        if (className.equals("androidx.recyclerview.widget.RecyclerView"))
        {
            switch (eventType)
            {
            case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
            case AccessibilityEvent.TYPE_VIEW_SCROLLED:
                findItemAndClick();
                break;
            }
        }
    }

    private void findItemAndClick(){
        scrollToTop();
        findItem();
    }

    private scrollToTop()
    {
        //code snippet, scroll top by ACTION_SCROLL_BACKWARD
        listviewNode.performAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
        //ACTION_SCROLL_BACKWARD cause TYPE_WINDOW_CONTENT_CHANGED, TYPE_VIEW_SCROLLED
    }

    private findItem()
    {
        //scroll down to find
        listviewNode.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
        //ACTION_SCROLL_FORWARD cause TYPE_WINDOW_CONTENT_CHANGED, TYPE_VIEW_SCROLLED
    }
...