如何解决Android 辅助功能 Chrome 读取 URL 缺少 http 或 https
我正在使用 android Accessibility 尝试获取 url,但 url 在文本中没有 http 或 https 使用 Android 10 和最新的 chrome 浏览器获取 url 没有方案。
一切正常,只是获取没有 http 或 https 的 url,例如 amazon.in/gp/help/customer/display.html/ref=aw?ie=UTF8&nodeId=200545940 由于哪个代码不起作用
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:packageNames="com.android.chrome"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="FeedbackAllMask"
android:notificationTimeout="0"
android:canRetrieveWindowContent="true"
android:canRequestFilterKeyEvents="true"
android:settingsActivity="" />
清单文件
<service
android:name=".MyAccessibilityService"
android:label="Extension Demo"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<Meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
public class MyAccessibilityService extends AccessibilityService {
@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://")) {
if (!prevIoUsUrl.equals(capturedText)) {
// Do something with the url.
prevIoUsUrl = 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() {
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。