如何使用AccessibilityInfo在任何应用程序的任何视图上阅读文本?

时间:2017-08-11 11:22:06

标签: android accessibility android-accessibility

我试图通过使用AccessibilityInfo类来读取任何应用程序的ListView中的每个项目。问题是我通过使用以下代码获得ListView中的项目总数:

 if(event.getClassName().equals("android.widget.ListView")) {
            String className= TextView.class.getName();
            AccessibilityNodeInfo nodeInfo= event.getSource();
            int i= nodeInfo.getChildCount(); }

但是我没有得到ListView中的项目名称,例如让一个ListView中有5个文本视图,然后我想从TextViews获取文本。我试图通过使用:

进一步打破nodeInfo对象
 for(int j=0; j<nodeInfo.getChildCount() ;j++){
                AccessibilityNodeInfo subChild = nodeInfo.getChild(j);
                CharSequence subText = subChild.getText();

                Log.e("MyService: ","ListView child name: "+subText);
            }

所以我在ListView中获取TextView的值时做错了,

不可能这样做吗?

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案,解决方案是: event.getSource()方法返回 AccessibilityNodeInfo 的实例,通过将该实例值转换为String格式,我们可以轻松获得结果。我们需要的是打破字符串并获得所需的结果,就我而言,我的方式是:

 String get_cord= String.valueOf(event.getSource());
    String[] first_split= get_cord.split("[;]");
                    for(int i=0; i<first_split.length; i++){
                        if(first_split[i].contains("text")){
                            String[] second_split= first_split[i].split(":");
                            user= second_split[1].trim();
                            System.out.println(user);
                            Log.e("MyService: ","username is: "+user);

                            break;
                        }
                    }`