1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| package com.withub.android.cloudsharingcourt.util;
import android.accessibilityservice.AccessibilityService; import android.text.TextUtils; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo;
import java.util.HashMap; import java.util.Map;
public class MyAccessibilityService extends AccessibilityService { Map<Integer, Boolean> handledMap = new HashMap<>(); public MyAccessibilityService() { } @Override public void onAccessibilityEvent(AccessibilityEvent event) { AccessibilityNodeInfo nodeInfo = event.getSource(); if (nodeInfo != null) { int eventType = event.getEventType(); if (eventType== AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED || eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { if (handledMap.get(event.getWindowId()) == null) { boolean handled = iterateNodesAndHandle(nodeInfo); if (handled) { handledMap.put(event.getWindowId(), true); } } } } }
private boolean iterateNodesAndHandle(AccessibilityNodeInfo nodeInfo) { if (nodeInfo != null&&nodeInfo.getClassName()!=null&&!TextUtils.isEmpty(nodeInfo.getText())) { int childCount = nodeInfo.getChildCount(); if ("android.widget.Button".equals(nodeInfo.getClassName())||"android.widget.TextView".equals(nodeInfo.getClassName())) { String nodeContent = nodeInfo.getText().toString(); if ("安装".equals(nodeContent) ||"打开".equals(nodeContent) ||"完成".equals(nodeContent) || "确定".equals(nodeContent) || "下一步".equals(nodeContent) || "确认".equals(nodeContent) || "继续安装".equals(nodeContent)) { nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK); return true; } } else if ("android.widget.ScrollView".equals(nodeInfo.getClassName())) { nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD); } for (int i = 0; i < childCount; i++) { AccessibilityNodeInfo childNodeInfo = nodeInfo.getChild(i); if (iterateNodesAndHandle(childNodeInfo)) { return true; } } } return false; }
@Override public void onInterrupt() { } }
|