【问题标题】:Get Chrome current Url via AccessibilityService通过 AccessibilityService 获取 Chrome 当前 URL
【发布时间】:2019-04-10 17:01:46
【问题描述】:

我正在尝试创建一个包含 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配置

<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:: 结果:| android.view.accessibility.AccessibilityNodeInfo@8000ccce; boundsInParent: 矩形(0, 0 - 681, 131); boundsInScreen: 矩形 (115, 71 - 796, 202);包名:com.android.chrome;班级名称: android.widget.EditText;文字:https://www.google.com;错误:空; 最大文本长度:-1;内容描述:空; viewIdResName: com.android.chrome:id/url_bar;可检查:假;检查:假; 可聚焦:真;重点:假;选择:假;可点击:真; 长点击:真;上下文可点击:假;启用:真;密码: 错误的;可滚动:假;行动:等等......

问题是:

1.如果我尝试去其他网站,我只会一次得到这个,没有任何反应

2.我无法获取网址

请帮助,并在此先感谢您!

【问题讨论】:

    标签: android google-chrome kotlin accessibilityservice


    【解决方案1】:

    response to a similar question 对事件本身使用深度优先搜索,而不是获取活动窗口的根。

    我现在正在使用此代码,它确实成功获取了每个访问站点的 URL。 但是,如果您想更快地解析节点(每个事件的 DFS 确实会消耗大量时间和资源),您可以筛选特定事件,例如“TYPE_VIEW_TEXT ...”,因为此事件会在用户在 Chrome 中键入时触发多功能框,您无需等待页面加载。

    【讨论】:

      【解决方案2】:

      尝试添加 typeWindowContentChanged 可访问性事件类型:

      android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-02
        • 1970-01-01
        • 2014-01-27
        • 2016-02-13
        • 2018-06-09
        • 2020-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多