Я хочу найти 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.
Не удалось сделать это для Android 8 или более поздней версии, сделал для < 8
не могли бы вы просветить меня о том, как вы достигли следующего!?
добился успеха в решении вышеуказанной проблемы?