红包精灵:https://github.com/hejunlin2013/RedPackage

效果图:


关键service代码:

实现原理

1.1 状态说明

    private static final String WECHAT_OPEN_CH = "拆红包";private static final String WECHAT_VIEW_SELF_CH = "查看红包";private static final String WECHAT_VIEW_OTHERS_CH = "领取红包";private static final String WECHAT_NOTIFICATION_TIP = "[微信红包]";

1.2 根据阶段选择不同的入口

在每次窗体状态发生变化后,根据当前所在的阶段选择入口。

        /* 如果戳开但还未领取 */if (mNeedUnpack && (mUnpackNodeList != null)) {Log.d(TAG, "事件----> start performAction 戳开但还未领取");int size = mUnpackNodeList.size();if (size > 0) {AccessibilityNodeInfo cellNode = mUnpackNodeList.get(size - 1);cellNode.performAction(AccessibilityNodeInfo.ACTION_CLICK);mNeedUnpack = false;}Log.d(TAG, "事件----> end performAction 戳开但还未领取");}
  1. 屏幕内容检测和自动化点击的实现

    /** 打开通知栏消息*/@TargetApi(Build.VERSION_CODES.JELLY_BEAN)private void openNotify(AccessibilityEvent event) {if(event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {return;}//将微信的通知栏消息打开Notification notification = (Notification) event.getParcelableData();PendingIntent pendingIntent = notification.contentIntent;Log.d(TAG, "事件----> 打开通知栏消息 " + event);try {pendingIntent.send();} catch (PendingIntent.CanceledException e) {e.printStackTrace();}}

和其他插件一样,这里使用的是Android API提供的AccessibilityService。这个类位于android.accessibilityservice包内,开启服务后就会自动做一些操作 像现在360的自动安装apk,也是开启了此服务。

AccessibilityService 服务在后台运行,等待系统在发生 AccessibilityEvent 事件时回调。这些事件指的是用户界面上发生的状态变化, 比如焦点变更、按钮按下等等。服务可以请求“查询当前窗口中内容”的能力。 开发辅助服务需要继承该类并实现其抽象方法。

2.1 配置AccessibilityService

在这个例子中,我们需要监听的事件是当红包来或者滑动屏幕时引起的屏幕内容变化,和点开红包时窗体状态的变化,因此我们只需要在配置XML的accessibility-service标签中加入一条

android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged" 或在onAccessibilityEvent回调函数中对事件进行一次类型判断

final int eventType = event.getEventType(); if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED || eventType == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) { // ... } 除此之外,由于我们只监听微信,还需要指定微信的包名

android:packageNames="com.tencent.mm" 为了获取窗口内容,我们还需要指定

android:canRetrieveWindowContent="true" 其他配置请看代码。

2.2 获取红包所在的节点

首先,我们要获取当前屏幕的根节点,下面两种方式效果是相同的:

      /* 聊天会话窗口,遍历节点匹配“领取红包”和"查看红包" */List<AccessibilityNodeInfo> nodes1 = this.findAccessibilityNodeInfosByTexts(this.rootNodeInfo, new String[]{WECHAT_VIEW_OTHERS_CH, WECHAT_VIEW_SELF_CH });if (!nodes1.isEmpty()) {String nodeId = Integer.toHexString(System.identityHashCode(this.rootNodeInfo));if (!nodeId.equals(lastFetchedHongbaoId)) {mLuckyMoneyReceived = true;mReceiveNodeList = nodes1;}return;}

2.3 红包标识符

    /*** 将节点对象的id和红包上的内容合并* 用于表示一个唯一的红包** @param node 任意对象* @return 红包标识字符串*/private String getHongbaoText(AccessibilityNodeInfo node) {/* 获取红包上的文本 */String content;try {AccessibilityNodeInfo i = node.getParent().getChild(0);content = i.getText().toString();} catch (NullPointerException npe) {return null;}Log.d(TAG, "事件----> start getHongbaoText() " + content);return content;}

欢迎关注我的个人公众号,android干货,源码解析

早期微信抢红包插件项目分享相关推荐

  1. android黑科技系列——微信抢红包插件原理解析和开发实现

    一.前言 自从几年前微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导 ...

  2. Android微信抢红包插件原理和实现 适配微信6.6.1版本

    Android微信抢红包插件原理和实现 适配微信6.6.1版本 一.前言 年关将至,小伙伴们又聊起了春节长假的旅行安排和各自家乡的年味习俗,不一而足.其中在各个微信群聊中抢红包也是为大家所津津乐道的. ...

  3. 医院预约挂号系统微信小程序项目分享

    这个是一个医院预约挂号的小程序系统,这个项目比较简易理解,很适合做计算机期末作业或者毕业设计. 医院预约挂号系统微信小程序项目主要的功能模块分析如下: 对该系统进行分析与设计,有以下几个主要的功能模块 ...

  4. Android 微信抢红包插件

    转载开源工程:https://github.com/geeeeeeeeek/WeChatLuckyMoney 这个Android插件可以帮助你在微信群聊抢红包时战无不胜.当检测到红包时,插件会自动点击 ...

  5. Android微信抢红包插件源码解析

    这个Android插件可以帮助你在微信群聊抢红包时战无不胜.当检测到红包时,插件会自动点击屏幕,人工点击的速度无法比拟. 你正在查看的是dev分支,这个分支包含大量实验性的修改,不再更新.如果你希望有 ...

  6. Android 辅助功能(无障碍)自定义开发类似微信抢红包插件

    背景: 通常在无人值守的Android智能设备或不能触摸交互的设备中,当系统运行异常时, 系统有可能会弹出应用程序无响应(ANR)对话框,提示是否终止当前进程或等待,或应用程序异常退出时系统偶尔也会有 ...

  7. 微信抢红包插件 android 8.0,重磅!微信8.0专属红包全量上线!

    "本文由我原创,来源 

  8. 【安卓学习之微信抢红包】 微信抢红包 1 - 知识点归纳

    █ [安卓学习之微信抢红包] 微信抢红包 1 - 知识点归纳 █ 相关文章: ● [安卓学习之微信抢红包] 微信抢红包 1 - 知识点归纳 ● [安卓学习之微信抢红包] 微信抢红包 2 - 通知服务( ...

  9. APP逆向分析之钉钉抢红包插件的实现-iOS篇

    花费了很多天的原创文章,转载请注明出处https://yohunl.com/ding-ding-qiang-hong-bao-cha-jian-iospian/ ,谢谢! 网络上关于微信红包的分析文章 ...

  10. 实现自己人生小目标之微信抢红包项目

    微信红包已经成为我们社交的一种方式,遇到朋友过生日发个小红包表示祝贺,遇到节日给长辈们发个红包表示慰问,遇到同学朋友群,漏掉了一个红包就仿佛失去了一个亿.这不,马上就要过年了,群里是不是又要下红包雨了 ...

最新文章

  1. 第二章个人技术和流程课后题
  2. JavaScript的编译模式
  3. 自己学习Foundation一些类
  4. python大学生信息管理系统_python学生信息管理系统
  5. QT绘制饼状图,自定义切片。
  6. CDH 6.x 安装 Phoenix 服务
  7. 【三维深度学习】多视角立体视觉模型R-MVSNet
  8. 区分PO,VO,DAO,BO,POJO
  9. C言语教程第四章: 数组(4)
  10. kafka监控工具Burrow安装
  11. 如何批量将 Word 文档转为 TXT 文本文档格式
  12. 简述ip地址的abc类如何划分_IP地址ABC三类划分详细内容记录
  13. html(jsp)登录页面
  14. Leetcode1278
  15. 使用ThreeJs搭建BIM模型浏览器,超大模型的分时渲染
  16. 2021年中式烹调师(初级)模拟考试系统及中式烹调师(初级)实操考试视频
  17. 语音信号端点检测 matlab,matlab中语音端点检测
  18. Html入门学习总结
  19. 计算机管理没有本地用户和组控制面板,win10管理没有本地用户和组怎么办_win10电脑管理没有本地用户和组解决方法...
  20. 【HDU 杭电 5671 Matrix】

热门文章

  1. .net导出Excel设置颜色font.ColorIndex 各颜色编号
  2. dedecms 判断是否有值然后显示
  3. 论文笔记_S2D.73_2019_BTS_从大到小:多尺度局部平面引导的单目深度估计
  4. 删除python读取的txt每一行尾部的\n
  5. 用 C# 做人脸检测(基于EmguCV)
  6. 无人车业务中的视觉三维重建
  7. 超级干货 | 用万字文章总结25种正则化方法(值得收藏)
  8. BiANet:用于快速高效实现RGB-D数据显著性目标检测的双边注意力模型
  9. 程序员需要记住的3个优秀网站
  10. mysql-基本操作