微信自动抢红包

简介: github地址 :https://github.com/linhaosheng/WeChatHongBao_Master/tree/master 微信自动抢红包,目前只适配了6.3.32版本的,在android studio上导入,运行程序后点击开始检测,如果手机没有开启无障碍服务,则会调到设置页面进行打开无障碍服务,该app主要是用到了AccessibilityService


github地址 :https://github.com/linhaosheng/WeChatHongBao_Master/tree/master


微信自动抢红包,目前只适配了6.3.32版本的,在android studio上导入,运行程序后点击开始检测,如果手机没有开启无障碍服务,则会调到设置页面进行打开无障碍服务,该app主要是用到了AccessibilityService 界面的ui控件的检测使用的是Google自带的uiautomatorviewer。

打开服务后监听三种状态 :

AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED  和 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED 和 

AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED 具体的代码如下:

switch (eventType) {
    //获取通知栏事件
    case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
        if (isScreenBlock) {
            wakeLock();
        }
        List<CharSequence> text = event.getText();
        if (!text.isEmpty()) {
            for (CharSequence sequence : text) {
                String message = String.valueOf(sequence);
                if (message.contains("微信红包")) {
                    openNotify(event);
                }
            }
        }
        break;
    case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
        openHongBao(event);
        break;
    case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
        findHongBao(event);
        break;
}
当通知栏显示有微信红包是 将触发:

if (event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {
    return;
}
Notification notification = (Notification) event.getParcelableData();
PendingIntent contentIntent = notification.contentIntent;
try {
    contentIntent.send();
} catch (PendingIntent.CanceledException e) {
    e.printStackTrace();
}
进行点击,进入聊天页面后,找到有红包的View进行点击:


System.out.println("evenClass-----" + event.getClassName());
if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
    // 拆红包界面
    getPacket(this);;
} else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())) {
    // 拆完红包后,看红包金额的界面
    getMoney();
} else if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())) {
    // 聊天界面
    openPacket(event);
}

点击红包

private void openPacket(AccessibilityEvent event) {
    System.out.println("openPacket----");
    AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
    if (rootInActiveWindow == null) {
        return;
    }
    List<AccessibilityNodeInfo> listPacket = rootInActiveWindow.findAccessibilityNodeInfosByText("领取红包");
    if (listPacket != null) {
        for (int i = listPacket.size() - 1; i >= 0; i--) {
            AccessibilityNodeInfo parent = listPacket.get(i).getParent();
            if (parent != null) {
                PerformClickUtils.performClick(parent);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (!"com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
                    PerformClickUtils.performBack(this);
                    return;
                }
            }
        }
    }

拆红包 :

private void getPacket(AccessibilityService accessibilityService) {
    AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
    if (rootInActiveWindow == null) {
        return;
    }
    //若出现 “该红包已超过24小时。如已领取,可在“我的红包”中查看" 则直接返回
    List<AccessibilityNodeInfo> back = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_expire);
    if (back != null) {
        List<AccessibilityNodeInfo> nodeInfoId = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_expire_close);  //关闭ID
        if (nodeInfoId != null && !nodeInfoId.isEmpty()) {
            PerformClickUtils.findViewIdAndClick(this, hongbao_expire_close);
        } else {
            PerformClickUtils.performBack(this);
        }
        PerformClickUtils.findTextAndClick(this, "聊天信息");
    }
    List<AccessibilityNodeInfo> hongbao = rootInActiveWindow.findAccessibilityNodeInfosByText("拆红包");
    if (hongbao != null && !hongbao.isEmpty()) {
        PerformClickUtils.findTextAndClick(accessibilityService, "拆红包");
    } else {
        List<AccessibilityNodeInfo> accessibilityNodeInfosByViewId = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_open);//开红包的ID
        if (accessibilityNodeInfosByViewId != null && !accessibilityNodeInfosByViewId.isEmpty()) {
            PerformClickUtils.findViewIdAndClick(this, hongbao_open);
        }
    }
}

获取红包的金额

private void getMoney() {
    //获取当前时间
    date = new Date(System.currentTimeMillis());
    String time = dateFormat.format(date);
    Money money = new Money();
    money.setTime(time);
    System.out.println("time--" + time);
    AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
    if (rootInActiveWindow == null) {
        return;
    }
    //获取钱包来源
    List<AccessibilityNodeInfo> accessibilityNodeInfosResource = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_resource);
    if (accessibilityNodeInfosResource != null && accessibilityNodeInfosResource.size() > 0) {
        if (accessibilityNodeInfosResource.get(0) != null) {
            resource = accessibilityNodeInfosResource.get(0).getText().toString();
            money.setResource(resource);
        }
    }
    //获取钱包金额
    List<AccessibilityNodeInfo> accessibilityNodeInfosNumber = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_number);
    if (accessibilityNodeInfosNumber != null && !accessibilityNodeInfosNumber.isEmpty()) {
        if (accessibilityNodeInfosNumber.get(0) != null) {
            number = accessibilityNodeInfosNumber.get(0).getText().toString();
            money.setMoney(number);
        }
    }
    System.out.println("money----" + money.getMoney());
    String objValue = Preferences.setObject(money);
    moneys.add(objValue);
    //点击返回按钮
    List<AccessibilityNodeInfo> back = rootInActiveWindow.findAccessibilityNodeInfosByText("返回");
    if (back != null) {
        PerformClickUtils.findTextAndClick(this, "返回");
    } else {
        PerformClickUtils.performBack(this);
    }
    PerformClickUtils.findTextAndClick(this, "聊天信息");
}



详细代码在github上,欢迎start和fork




目录
相关文章
|
10月前
|
Web App开发 缓存 前端开发
🎊🎊🎊深入 ServiceWorker,消息推送,后台同步,一网打尽!
上一章讲到了ServiceWorker的基础使用,但是它的功能不仅仅只有这些,还有很多很多,比如消息推送,后台同步,甚至还有WebRTC,这一章我们来进阶ServiceWorker。
172 0
|
11月前
|
移动开发 Android开发
实战:第七章:微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面...
实战:第七章:微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面...
113 0
|
消息中间件 存储 API
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
需求:收款到账语音提醒功能 NSE是比Voip更优雅的解决方案,完成迁移后,总体代码量也比Voip方案少了不少。
223 0
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
|
存储 小程序
小程序直播间发红包
直播间现有的营销工具不足以满足我们的需要,那我们只有自己动手来做了。操起代码就是干,在淘佳客小程序里面加入了这个功能,先看下效果。
176 0
小程序直播间发红包
|
小程序 前端开发
微信小程序直播间开发抽红包功能
小程序直播具备评论、点赞、连麦、拍一拍等丰富的互动功能,抽奖、优惠券等高效的营销功能,以及成员管理、评论管理、推流直播、数据看板等完善商家工具。通过引入小程序直播组件,商家自有小程序可快速具备直播能力,提升经营效率。
172 0
微信小程序直播间开发抽红包功能
|
监控 前端开发 开发者
微信扫码登录的几秒钟里,到底发生了什么
微信扫码登录的几秒钟里,到底发生了什么
微信扫码登录的几秒钟里,到底发生了什么
小技巧 - 查询微信被谁投诉方法技巧
小技巧 - 查询微信被谁投诉方法技巧
168 0
|
存储 NoSQL 安全
微信、淘宝类扫码登录是怎么实现的?
首先,介绍下什么是扫码登录。现在,大部分同学手机上都装有qq和淘宝,天猫等这一类的软件。而开发这些app的企业,都有他们相对应的网站。
微信、淘宝类扫码登录是怎么实现的?
抢红包神器上线,再也不怕抢不到红包了!
抢红包神器上线!教你不错过每个红包的独门秘籍!钉钉宜搭自动指令全新上线~
903 0
抢红包神器上线,再也不怕抢不到红包了!