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