Получить текущий URL Chrome через AccessibilityService - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь создать приложение, которое включает функцию регистрации посещенных сайтов Chrome

вот мой AccessibilityService

class CoreService : AccessibilityService(){

override fun onInterrupt() {
    return
}

var TAG  = "app:"

override fun onServiceConnected() { 
    Log.i(TAG,"Connected")
}

override fun onAccessibilityEvent(event: AccessibilityEvent) {
        Log.i(TAG,"onAccessibilityEvent")
        onChromeActivity(getRootInActiveWindow())
}

fun onChromeActivity(nodeInfo: AccessibilityNodeInfo) {

    var result = "|"
    var arra = nodeInfo.findAccessibilityNodeInfosByText("http");

    for (i in 0 until arra.size) {
        result += "\n" + arra.get(i).toString();
    }
    Log.i(TAG,"result: $result")
} 

}

xml config

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityFlags="flagDefault|flagIncludeNotImportantViews|flagRequestTouchExplorationMode|flagRequestEnhancedWebAccessibility|flagReportViewIds|flagRetrieveInteractiveWindows"
android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="0"
android:canRetrieveWindowContent="true"
android:packageNames="com.android.chrome"
android:description="@string/desc"/>

Пока что я получаю этот logcat

2018-11-07 17: 08: 15.516 19631-19631 / com.jmg21.omgi I / app :: result: | android.view.accessibility.AccessibilityNodeInfo@8000ccce; boundsInParent: Rect (0, 0 - 681, 131); boundsInScreen: Rect (115, 71 - 796, 202); имя_пакета: com.android.chrome; имя класса: android.widget.EditText; текст: https://www.google.com; ошибка: ноль; maxTextLength: -1; contentDescription: null; viewIdResName: com.android.chrome:id/url_bar; проверяемый: ложный; проверено: ложно; фокусируемый: правда; сфокусировано: ложно; выбрано: ложно; кликабельно: правда; longClickable: true; contextClickable: false; включен: правда; пароль: ложный; прокручиваемый: ложный; действия: и так далее ...

Проблема:

1. Я получаю это только один раз, если я пытаюсь перейти на другой сайт, ничего не происходит

2.Не могу получить URL

Пожалуйста, помогите и спасибо заранее!

1 Ответ

0 голосов
/ 30 декабря 2018

В ответе на аналогичный вопрос используется поиск в глубину по самому событию, а не получение корня активного окна.

Я использую этот код прямо сейчас, и он успешно получает URL каждого посещенного сайта. Хотя, если вы хотите проанализировать узлы быстрее (DFS для каждого события требует значительного времени и ресурсов), вы можете отследить определенные события, такие как «TYPE_VIEW_TEXT ...», так как это событие срабатывает, когда пользователь вводит данные в Chrome. omnibox, и вам не нужно ждать загрузки страницы.

...