Как я могу получить текущий URL-адрес из Google Chrome с помощью службы специальных возможностей?

Я хочу найти URL-адрес текущей вкладки, используя службу специальных возможностей. Когда я открываю вкладку, я не могу получить URL-адрес, но я могу отображать тексты на экране.

Я использую следующий код:`

public class ASUrl extends AccessibilityService {
    private static final String TAG = ASUrl.class
            .getSimpleName();


@Override
public void onAccessibilityEvent(AccessibilityEvent event) {

    AccessibilityNodeInfo source = event.getSource();

    if (source == null)
        return;

    final String packageName = String.valueOf(source.getPackageName());

    // Add browser package list here (comma seperated values)
    String BROWSER_LIST = "";

    List<String> browserList
            = Arrays.asList(BROWSER_LIST.split(",\\s*"));
    if (event.getEventType()
            == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
        if (!browserList.contains(packageName)) {
            return;
        }
    }

    if (browserList.contains(packageName)) {
        try {
            // App opened is a browser.
            // Parse urls in browser.
            if (AccessibilityEvent
                    .eventTypeToString(event.getEventType())
                    .contains("WINDOW")) {
                AccessibilityNodeInfo nodeInfo = event.getSource();
                getUrlsFromViews(nodeInfo);
            }
        } catch(StackOverflowError ex){
            ex.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

/**
 * Method to loop through all the views and try to find a URL.
 * @param info
 */
public void getUrlsFromViews(AccessibilityNodeInfo info) {

    try {
        if (info == null)
            return;

        if (info.getText() != null && info.getText().length() > 0) {

            String capturedText = info.getText().toString();

            if (capturedText.contains("https://")
                    || capturedText.contains("http://")) {

                Log.i(TAG, "Captured "+ capturedText);



            }
        }

        for (int i = 0; i < info.getChildCount(); i++) {
            AccessibilityNodeInfo child = info.getChild(i);
            getUrlsFromViews(child);
            if (child != null){
                child.recycle();
            }
        }
    } catch(StackOverflowError ex){
        ex.printStackTrace();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

@Override
public void onInterrupt() {

}
}`

Я не могу получить URL. Мой XML ниже:

<accessibility-service xmlns:android = "http://schemas.android.com/apk/res/android"
    android:accessibilityFeedbackType = "feedbackGeneric"
    android:accessibilityFlags = "flagDefault|flagIncludeNotImportantViews|flagRequestTouchExplorationMode|flagRequestEnhancedWebAccessibility|flagReportViewIds|flagRetrieveInteractiveWindows"
    android:canPerformGestures = "true"
    android:canRetrieveWindowContent = "true"
    android:accessibilityEventTypes = "typeWindowStateChanged|typeWindowContentChanged|typeAllMask"
  />

Я просмотрел другие решения, такие как Android: чтение URL-адреса Google Chrome с помощью службы специальных возможностей, но это не помогло.

Код дает URL-адрес в первый раз, но после этого он не работает.

Тестирую на Android 8.1.0, API27.

добился успеха в решении вышеуказанной проблемы?

bhanu kaushik 30.09.2019 07:14

Не удалось сделать это для Android 8 или более поздней версии, сделал для < 8

Ananya 01.10.2019 22:29

не могли бы вы просветить меня о том, как вы достигли следующего!?

bhanu kaushik 04.10.2019 06:31
0
3
608
0

Другие вопросы по теме