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

Я хочу найти 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.

...