我正在尝试在Android上的BBC新闻应用中阅读文章名称。我创建了一个accessibilityService
来阅读屏幕内容。我遍历找到的所有视图并打印node.toString()
以及它可能包含的所有子视图的node.getText().toString()
。我找不到任何带有文章名称的TextView
。
我知道有可能提取,因为谷歌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"/>
提前致谢
答案 0 :(得分:0)
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
。