微信自动抢红包
来源:互联网 发布:2016西决g6知乎 编辑:程序博客网 时间:2024/04/30 00:53
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
1 0
- 微信自动抢红包
- android实现微信自动抢红包
- 逆向工程-微信自动抢红包
- 微信自动回复和自动抢红包实现原理(三):自动抢红包
- 微信自动回复和自动抢红包实现原理(三):自动抢红包
- Android实现微信自动抢红包的程序
- 使用AccessibilityService实现微信自动抢红包
- 使用AccessibilityService实现微信自动抢红包
- 一步一步实现iOS微信自动抢红包(非越狱)
- Android AccessibilityService实现微信自动抢红包
- 一步一步实现iOS微信自动抢红包(非越狱)
- 一步一步实现iOS微信自动抢红包(非越狱)
- 一步一步实现iOS微信自动抢红包(非越狱)
- 一步一步实现iOS微信自动抢红包(非越狱)
- iOS开发之微信自动抢红包功能
- 一步一步实现iOS微信自动抢红包(非越狱)
- 一步一步实现iOS微信自动抢红包(非越狱)
- 一步一步实现iOS微信自动抢红包(非越狱)
- [Azure]基于Invoke-Parallel对Azure ARM虚拟机批量开关机
- ZJOI 2009 取石子游戏 博弈论
- Spring MVC过滤器-字符集过滤器(CharacterEncodingFilter)
- AVPlay播放视频
- 函数的返回值是引用
- 微信自动抢红包
- 二值图像连通域标记算法与代码加载栅格影响,提取像素转点存储shp文件
- 文章标题VirtualBox Centos 网络连接问题
- Java反射机制访问类私有方法和变量
- 京东广告推荐机器学习系统实践
- 「视频直播技术详解」系列之四:推流和传输
- Android studio 连不上真机,adb 没有启动2
- MySQL配置文件mysql.ini参数详解、MySQL性能优化
- 谈谈php里的IOC控制反转,DI依赖注入