Android 如何获取当前Whatsapp窗口的名称';辅助功能服务中的标题栏?
我正在为Whatsapp提供无障碍服务。每当用户按下输入框时,我想知道当前的标题栏,其中通常有收件人whatsapp用户或whatsapp组的名称: 我对获取字符串Android 如何获取当前Whatsapp窗口的名称';辅助功能服务中的标题栏?,android,accessibility,accessibilityservice,Android,Accessibility,Accessibilityservice,我正在为Whatsapp提供无障碍服务。每当用户按下输入框时,我想知道当前的标题栏,其中通常有收件人whatsapp用户或whatsapp组的名称: 我对获取字符串testuser 以下是我的xml: <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeViewClicked|typeViewFo
testuser
以下是我的xml:
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeViewClicked|typeViewFocused"
android:packageNames="com.whatsapp"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.example.android.apis.accessibility.TestBackActivity"
android:canRetrieveWindowContent="true" />
我尝试获取当前窗口或父窗口并检查其标题,两者似乎都为空:
AccessibilityNodeInfo currentNode = event.getSource();
AccessibilityNodeInfo parentNode = nodeInfo.getParent();
AccessibilityWindowInfo currentWindow = currentNode.getWindow();
AccessibilityWindowInfo parentWindow = parentNode.getWindow();
// currentWindow.getTitle();
// parentWindow.getTitle();
我已经编写了一个库来帮助使用AccessibilityNodeInfos和其他Android AccessibilityAPI进行工作。几乎完成了,需要记录在案。但是,使用此库,您可以这样完成: 在主服务中(允许访问根辅助功能节点),执行以下操作
A11yNodeInfo nodeInfo = A11yNodeInfo.wrap(getRootInActiveWindow());
A11yNodeInfo result = nodeInfo.visit(new A11yNodeInfo.OnVisitListener() {
@Override
public boolean onVisit(A11yNodeInfo nodeInfo) {
A11yNodeInfoMatcher matcher = new A11yNodeInfoMatcher();
//Add properties to the matcher as needed. I'm just guessing here!
return matcher.matches(nodeInfo);
}
});
如果要查看该元素的可访问性属性,还可以打印整个可访问性树:
Log.d("Tag", A11yNodeInfo.wrap(getRootInActiveWindow).toViewHeirarchy());
这对我很有效:
AccessibilityNodeInfo nodeInfo = event.getSource();
try
{
List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId = nodeInfo.findAccessibilityNodeInfosByViewId("com.whatsapp:id/conversation_contact_name");
if (findAccessibilityNodeInfosByViewId.size() > 0)
{
AccessibilityNodeInfo parent = (AccessibilityNodeInfo) findAccessibilityNodeInfosByViewId.get(0);
String contactName = parent.getText().toString();
if (contactName != null && !contactName.isEmpty()) // do your stuff here, contactName contains the chat contact name!
}
}
catch(Exception contactName) {}
我想你忘了链接到你的图书馆了
AccessibilityNodeInfo nodeInfo = event.getSource();
try
{
List<AccessibilityNodeInfo> findAccessibilityNodeInfosByViewId = nodeInfo.findAccessibilityNodeInfosByViewId("com.whatsapp:id/conversation_contact_name");
if (findAccessibilityNodeInfosByViewId.size() > 0)
{
AccessibilityNodeInfo parent = (AccessibilityNodeInfo) findAccessibilityNodeInfosByViewId.get(0);
String contactName = parent.getText().toString();
if (contactName != null && !contactName.isEmpty()) // do your stuff here, contactName contains the chat contact name!
}
}
catch(Exception contactName) {}
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityFeedbackType="feedbackAllMask"
android:accessibilityFlags="flagIncludeNotImportantViews|flagReportViewIds"
android:canRetrieveWindowContent="true"
android:packageNames="com.whatsapp"
/>
@Override
public void onServiceConnected()
{
AccessibilityServiceInfo info=getServiceInfo();
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
this.setServiceInfo(info);
}