不用root,不刷机微信云控系统源码的实现,核心代码技术之二AccessibilityService

        在不用root,不刷机实现云控系统的技术实现中,还有一种实现方式就是AccessibilityService。这种方式是借助Android自带的辅助功能实现模拟点击,模拟输入,模拟滑动等等操作。当然该种方式也有一定的限制性,相信大家在使用的过程中会慢慢发现其受限的地方。

       话不多说,这里我们直接上代码,需要源码或者定制开发的请加威信393231639。

if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED && event.getClassName().equals("com.tencent.mm.ui.LauncherUI")) {
    //记录打招呼人数置零
    i = 0;
    //当前在微信聊天页就点开发现
    openNext("发现");
    //然后跳转到附近的人
    openDelay(1000, "附近的人");
} else if (event.getClassName().equals("com.tencent.mm.plugin.nearby.ui.NearbyFriendsUI") && eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
    prepos = 0;
    //当前在附近的人界面就点选人打招呼
    AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
    List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText("米以内");
    Log.d("name", "附近的人列表人数: " + list.size());
    if (i < (list.size() * page)) {
        list.get(i % list.size()).performAction(AccessibilityNodeInfo.ACTION_CLICK);
        list.get(i % list.size()).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
    } else if (i == list.size() * page) {
        //本页已全部打招呼,所以下滑列表加载下一页,每次下滑的距离是一屏
        for (int i = 0; i < nodeInfo.getChild(0).getChildCount(); i++) {
            if (nodeInfo.getChild(0).getChild(i).getClassName().equals("android.widget.ListView")) {
                AccessibilityNodeInfo node_lsv = nodeInfo.getChild(0).getChild(i);
                node_lsv.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
                page++;
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException mE) {
                            mE.printStackTrace();
                        }
                        AccessibilityNodeInfo nodeInfo_ = getRootInActiveWindow();
                        //nodeInfo_.findFocus();
                        List<AccessibilityNodeInfo> list_ = nodeInfo_.findAccessibilityNodeInfosByText("米以内");
                        Log.d("name", "列表人数: " + list_.size());
                        //滑动之后,上一页的最后一个item为当前的第一个item,所以从第二个开始打招呼
                       // list_.get(1).
                        list_.get(1).performAction(AccessibilityNodeInfo.ACTION_CLICK);
                        list_.get(1).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
                    }
                }).start();
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/wx_16620839974/article/details/80781795