Android 如何使用AccessibilityService检索正在运行的其他应用程序的内容。。?

Android 如何使用AccessibilityService检索正在运行的其他应用程序的内容。。?,android,Android,我在无障碍服务公司工作。我需要使用辅助功能服务获取应用程序名称。我已经研究了Android网站开发者的无障碍服务文档。但没有提到使用可访问性获取应用程序名称 我还想从后台运行的其他应用程序(活动)的“文本视图”中提取文本。我怎么能做到这一点 我假设您知道如何实现AccessibilityService 正在检索窗口内容: 类型\u窗口\u内容\u更改的第一个寄存器事件 @Override public void onAccessibilityEvent(AccessibilityEvent

我在无障碍服务公司工作。我需要使用辅助功能服务获取应用程序名称。我已经研究了Android网站开发者的无障碍服务文档。但没有提到使用可访问性获取应用程序名称

  • 我还想从后台运行的其他应用程序(活动)的“文本视图”中提取文本。我怎么能做到这一点


  • 我假设您知道如何实现AccessibilityService

    正在检索窗口内容:

    类型\u窗口\u内容\u更改的第一个寄存器
    事件

     @Override
     public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent){
         int eventType = accessibilityEvent.getEventType();
    
         switch (eventType) {
    
             case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
    
                 AccessibilityNodeInfo rootNode = getRootInActiveWindow();
                 ArrayList<AccessibilityNodeInfo> textViewNodes = new ArrayList<AccessibilityNodeInfo>();
    
                 findChildViews(rootNode);
    
                 for(AccessibilityNodeInfo mNode : textViewNodes){
                    if(mNode.getText()==null){
                        return;
                    }
                    String tv1Text = mNode.getText().toString();
    
                    //do whatever you want with the text content...
    
                 }
             break;
    
         }
     }
    
    据我所知,没有确定的方法来获取应用程序名称,但您可以尝试从
    TYPE\u WINDOW\u STATE\u CHANGED
    events获取事件对象的文本内容

     @Override
     public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent){
         int eventType = accessibilityEvent.getEventType();
    
         switch (eventType) {
    
             case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
    
                 AccessibilityNodeInfo rootNode = getRootInActiveWindow();
                 ArrayList<AccessibilityNodeInfo> textViewNodes = new ArrayList<AccessibilityNodeInfo>();
    
                 findChildViews(rootNode);
    
                 for(AccessibilityNodeInfo mNode : textViewNodes){
                    if(mNode.getText()==null){
                        return;
                    }
                    String tv1Text = mNode.getText().toString();
    
                    //do whatever you want with the text content...
    
                 }
             break;
    
         }
     }
    
    尝试转储accessibilityEvent.toString()&你就会知道我在说什么


    另外,
    accessibilityEvent.getPackageName()
    是获取该应用程序包名的简单方法;以防你发现它有用

    我假设您知道如何实现AccessibilityService

    正在检索窗口内容:

    类型\u窗口\u内容\u更改的第一个寄存器
    事件

     @Override
     public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent){
         int eventType = accessibilityEvent.getEventType();
    
         switch (eventType) {
    
             case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
    
                 AccessibilityNodeInfo rootNode = getRootInActiveWindow();
                 ArrayList<AccessibilityNodeInfo> textViewNodes = new ArrayList<AccessibilityNodeInfo>();
    
                 findChildViews(rootNode);
    
                 for(AccessibilityNodeInfo mNode : textViewNodes){
                    if(mNode.getText()==null){
                        return;
                    }
                    String tv1Text = mNode.getText().toString();
    
                    //do whatever you want with the text content...
    
                 }
             break;
    
         }
     }
    
    据我所知,没有确定的方法来获取应用程序名称,但您可以尝试从
    TYPE\u WINDOW\u STATE\u CHANGED
    events获取事件对象的文本内容

     @Override
     public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent){
         int eventType = accessibilityEvent.getEventType();
    
         switch (eventType) {
    
             case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
    
                 AccessibilityNodeInfo rootNode = getRootInActiveWindow();
                 ArrayList<AccessibilityNodeInfo> textViewNodes = new ArrayList<AccessibilityNodeInfo>();
    
                 findChildViews(rootNode);
    
                 for(AccessibilityNodeInfo mNode : textViewNodes){
                    if(mNode.getText()==null){
                        return;
                    }
                    String tv1Text = mNode.getText().toString();
    
                    //do whatever you want with the text content...
    
                 }
             break;
    
         }
     }
    
    尝试转储accessibilityEvent.toString()&你就会知道我在说什么


    另外,
    accessibilityEvent.getPackageName()
    是获取该应用程序包名的简单方法;以防你发现它有用

    前面的答案缺少childCount的定义


    int childCount=parentView.getChildCount()

    前面的答案缺少childCount的定义


    int childCount=parentView.getChildCount()

    是否也可以获取imageview的内容(位图或其他内容)?是否也可以获取imageview的内容(位图或其他内容)?