package com.halzhang.android.examples.accessibilityexample; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.text.TextUtils; import android.view.accessibility.AccessibilityNodeInfo; import java.util.List; /** * Created by Hal on 16/12/16. */ public class Utils { public static AccessibilityNodeInfo getNodeInfoById(AccessibilityNodeInfo parent, String viewId) { List<AccessibilityNodeInfo> nodeInfos = parent.findAccessibilityNodeInfosByViewId(viewId); if (nodeInfos == null || nodeInfos.isEmpty()) { return null; } return nodeInfos.get(0); } public static AccessibilityNodeInfo getNodeInfoByIdAndContentDesc(AccessibilityNodeInfo parent, String viewId, String contentDesc) { List<AccessibilityNodeInfo> nodeInfos = parent.findAccessibilityNodeInfosByViewId(viewId); if (nodeInfos == null || nodeInfos.isEmpty()) { return null; } for (AccessibilityNodeInfo nodeInfo : nodeInfos) { if (TextUtils.equals(contentDesc, nodeInfo.getContentDescription())) { return nodeInfo; } } return null; } public static AccessibilityNodeInfo getNodeInfoByIdAndText(AccessibilityNodeInfo parent, String viewId, String text) { List<AccessibilityNodeInfo> nodeInfos = parent.findAccessibilityNodeInfosByViewId(viewId); if (nodeInfos == null || nodeInfos.isEmpty()) { return null; } for (AccessibilityNodeInfo nodeInfo : nodeInfos) { CharSequence desc = nodeInfo.getText(); if (TextUtils.equals(text, desc)) { return nodeInfo; } } return null; } public static AccessibilityNodeInfo getNodeInfoByIdAndClassName(AccessibilityNodeInfo parent, String viewId, String className) { List<AccessibilityNodeInfo> nodeInfos = parent.findAccessibilityNodeInfosByViewId(viewId); if (nodeInfos == null || nodeInfos.isEmpty()) { return null; } for (AccessibilityNodeInfo nodeInfo : nodeInfos) { if (TextUtils.equals(className, nodeInfo.getClassName())) { return nodeInfo; } } return null; } public static AccessibilityNodeInfo getNodeInfoByText(AccessibilityNodeInfo parent, String text) { List<AccessibilityNodeInfo> nodeInfos = parent.findAccessibilityNodeInfosByText(text); if (nodeInfos == null || nodeInfos.isEmpty()) { return null; } return nodeInfos.get(0); } public static AccessibilityNodeInfo getNodeInfoByTextAndClassName(AccessibilityNodeInfo parent, String text, String className) { List<AccessibilityNodeInfo> nodeInfos = parent.findAccessibilityNodeInfosByText(text); if (nodeInfos == null || nodeInfos.isEmpty()) { return null; } for (AccessibilityNodeInfo nodeInfo : nodeInfos) { if (TextUtils.equals(className, nodeInfo.getClassName())) { return nodeInfo; } } return null; } /** * 设置文本 */ public static void setText(Context context, AccessibilityNodeInfo node, String reply) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Bundle args = new Bundle(); args.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, reply); node.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, args); } else { ClipData data = ClipData.newPlainText("reply", reply); ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); clipboardManager.setPrimaryClip(data); node.performAction(AccessibilityNodeInfo.ACTION_FOCUS); // 获取焦点 node.performAction(AccessibilityNodeInfo.ACTION_PASTE); // 执行粘贴 } } public static AccessibilityNodeInfo getParentByClassName(@NonNull AccessibilityNodeInfo childNodeInfo, String className) { AccessibilityNodeInfo parent = childNodeInfo.getParent(); if (parent == null) { return null; } if (TextUtils.equals(className, parent.getClassName())) { return parent; } else { return getParentByClassName(parent, className); } } }