gpt4 book ai didi

android - 没有TextView时如何从accessibilityService中读取内容?

转载 作者:行者123 更新时间:2023-11-29 14:13:11 24 4
gpt4 key购买 nike

我正在尝试在 Android 上的 BBC 新闻应用程序中阅读文章名称。我创建了一个 accessibilityService 来读取屏幕内容。我遍历找到的所有 View 并打印 node.toString() 和所有 subview 可能具有的任何 node.getText().toString()。我找不到任何包含文章名称的 TextView

我知道它可以提取,因为 Google TalkBack 可以很好地读出文章。有谁知道它是如何被隐藏的,我可以查看它吗?

我的 accessibilityService 的设置如下所示

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault|flagReportViewIds"
android:canRetrieveWindowContent="true"
android:description="@string/service_description"
android:notificationTimeout="1000"/>

提前致谢

最佳答案

JSONObject getTextViews(AccessibilityNodeInfo info)  {
if(info!=null){
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("Class:",""+info.getClassName());

if(info.getClassName().equals("android.widget.TextView")){
jsonObject.put("Text",""+info.getText());
// Log.d("TextViews:", ""+info.getText());
return jsonObject;
}else {
JSONArray array = new JSONArray();
for(int i=0;i<info.getChildCount();i++){
array.put(getTextViews(info.getChild(i)));
}
jsonObject.put("Child",array);
}
} catch (JSONException e) {
e.printStackTrace();
}

return jsonObject;
}else
return null;
}

这是一个递归函数,以 Json Hierarchy 的形式获取前台窗口上的整个布局。只需传递 root AccessibilityNodeInfo object。在服务的 onAccessibilityEvent 中调用此函数并使用 EventType AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED

关于android - 没有TextView时如何从accessibilityService中读取内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com