android - 如何使用AccessibilityInfo在任何应用程序的任何视图上阅读Text?

我试图通过使用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个textview,那么我想从该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的值时做错了什么,

要么

这是不可能的吗?

最佳答案

我自己找到了解决方案,解决方案是:
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;
                        }
                    }`

本文翻译自 https://stackoverflow.com/questions/45634004/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 android accessibility android-accessibility


相关文章:

java - JNI:定期从C调用Java方法不起作用

android - 如何在App名称的情况下更改Android Talkback

css - 使用:focus作为:hover替代键盘导航

android - 全萤幕TYPE_ACCESSIBILITY_OVERLAY

android - 使用对讲时,使用滑动在标题之间导航

android - 为什么AccessibilityService的onAccessibilityEvent(..)方法多次读取同一视图?

java - Android框架?

java - Android JDBC无法正常工作:驱动程序上的ClassNotFoundException

javascript - 一个HTML页面上的多个表单:如何将Tab键限制为单个表单?

android - Android是否支持跨应用程序文件访问