前言:之前写过一篇软件推广的博客,有小伙伴留言问是否能提供下代码做参考,今天我就依据微信7.0.10版本来实现。

一、原理解析
关于AccessibilityService官网是这样介绍的

Accessibility services should only be used to assist users with disabilities in using Android devices and apps. They run in the backgro und and receive callbacks by the system when AccessibilityEvents are fired. Such events denote some state transition in the user interface, for example, the focus has changed, a button has been clicked, etc.

上面大概的意思就是AccessibilityService是一个辅助服务,可用来帮助残障人士使用Android设备,对页面的内容变化做出相应的处理等。

官网参考地址:https://developer.android.google.cn/reference/android/accessibilityservice/AccessibilityService.html

二、开发思路
通过注册AccessibilityService来监听通知栏和页面内容变化事件
通过系统提供的findAccessibilityNodeInfosByText和findAccessibilityNodeInfosByViewId来获取页面具体的控件对象
通过performAction(AccessibilityNodeInfo.ACTION_CLICK)方法来模拟点击事件

三、代码实现

1、编写一个类继承AccessibilityService

public class RedPacketService extends AccessibilityService {private static final String TAG = "RedPacketService";private static final String ENVELOPE_TEXT_KEY = "[微信红包]";//红包消息的关键字@Overridepublic void onInterrupt() {//服务中断,如授权关闭或者将服务杀死Toast.makeText(this, "中断抢红包服务", Toast.LENGTH_SHORT).show();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return START_STICKY;}@Overrideprotected void onServiceConnected() {super.onServiceConnected();//连接服务后,一般是在授权成功后会接收到Toast.makeText(this, "连接抢红包服务", Toast.LENGTH_SHORT).show();}

2.接收事件,拦截通知栏变化,界面变化

 @Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {//接收事件,如触发了通知栏变化、界面变化等final int eventType = event.getEventType();try {String className = event.getClassName().toString();Log.w(TAG, "当前事件的类名:" + className + "  ---  eventType: " + eventType);if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {//32openEnvelope(event);} else if (eventType == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {//2048openEnvelope(event);}} catch (Exception e) {e.printStackTrace();}}

3、对拦截的事件进行分析处理

private void openEnvelope(AccessibilityEvent event) {if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName()) ||"android.widget.LinearLayout".equals(event.getClassName()) ||"android.widget.FrameLayout".equals(event.getClassName()) ||"android.widget.ListView".equals(event.getClassName()) ||"android.widget.TextView".equals(event.getClassName())) {checkKey();} else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyNotHookReceiveUI".equals(event.getClassName())) {openPacket();}}

4、对微信用户列表的分析处理

见下图:

分析后发现微信聊天列表每个item对应的id为:com.tencent.mm:id/bah ,每个item里面文本信息的id为:com.tencent.mm:id/bal

所以根据两个id我们就可以写代码了:

        //微信界面列表List<AccessibilityNodeInfo> list2 = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bah");for (AccessibilityNodeInfo n2 : list2) {//文本内容List<AccessibilityNodeInfo> list3 = n2.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/bal");if (list3.size() > 0) {String string = list3.get(0).getText().toString();if (string.contains(ENVELOPE_TEXT_KEY)) {n2.performAction(AccessibilityNodeInfo.ACTION_CLICK);break;}}}

5、对微信聊天界面的分析处理

见下图:

分析后发现聊天界面每个用户发送红包内容的id为:com.tencent.mm:id/atb

所以根据这个id我们就可以写代码了:

        //聊天界面List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/atb");for (AccessibilityNodeInfo n : list) {List<AccessibilityNodeInfo> listape = n.findAccessibilityNodeInfosByText("已领取");if (listape.size() <= 0) {if (n.findAccessibilityNodeInfosByText("已过期").size() <= 0) {if (n.findAccessibilityNodeInfosByText("已被领完").size() <= 0) {n.performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}}

6、对抢红包界面的分析处理

见下图:

分析后发现抢红包界面 “開”的id为:com.tencent.mm:id/dan

所以根据这个id我们就可以写代码了:

List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/dan");
Log.w(TAG, "程序来到了这里  集合大小: " + list.size());
for (AccessibilityNodeInfo info : list) {info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}

代码下载链接:https://download.csdn.net/download/Abner_Crazy/12101642

软件下载链接:https://sj.qq.com/myapp/detail.htm?apkName=central.scjgt.utils

声明:本文依据Android Accessbilityservice开发,无需root权限。本文内容仅供娱乐学习,切不可用于其它非法用途。如果有人利用本文技术进行非法操作带来的后果都是操作者自己承担,和本文以及本文作者没有任何关系。(抢红包本就是一种娱乐放松的行为,不要因为使用本软件伤了朋友间的情谊~)

微信抢红包原理分析及实现(适配微信7.0.10版本)相关推荐

  1. 电脑端多开微信及其原理分析

    文章目录 电脑端多开微信及其原理分析 相关内容:Python 实用内容 1.如何实现 - CMD 代码版本 2.如何实现 - python 代码版本 3.启动原理 电脑端多开微信及其原理分析 相关内容 ...

  2. iOS微信8.0.10版本唤醒隐藏功能,还有这几个变化

    前几天 iOS 微信更新到 v8.0.10 版本,当时我也发文给大家说了一下,最近我发现啦一个功能 iOS 微信 8.0.10 版本还含有一些隐藏的功能,比如聊天时的「边写边译」,以及朋友圈视频封面( ...

  3. MySql.Data.dll 适配.NET 4.0的版本免费下载) 网上找了很久都是要收费的,最后github下载的,链接如下: https://github.com/BingFengHung/MyS

    MySql.Data.dll 适配.NET 4.0的版本免费下载 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居右 SmartyPants 创建一个自定义列表 如 ...

  4. js微信抢红包脚本代码_javascript实现仿微信抢红包

    仿微信抢红包 javascript实现仿微信抢红包 红包个数:个

  5. 浅谈《微信抢红包原理》

    现在很多人手机可能都安装了抢红包软件,为了过年抢红包不错过,当然会下载来用用,其实,现在的抢红包软件,基本都是通过监听通知栏消息"[微信红包]"字样,作为识别是红包的依据的,可能大 ...

  6. python微信抢红包代码_用Python实现微信自动化抢红包,再也不用担心抢不到红包了...

    1. 概述 刚刚收到了两个消息,一个好消息,一个坏消息. 先说好消息,好消息就是微信群里有人要发红包,开心~ 不过转念一想,前几次的红包一个都没抢到,这次???不由自主的叹了一口气 ... 过了一会, ...

  7. php微信昵称保存,分析一次写入微信昵称数据执行sql报错问题

    客户反馈之前做的一个专题,有个用户报名数据没有正确写入.简单介绍下h5功能,类似报名功能,微信下授权后获取到openid.nichname,之后填写姓名并选择所在城市等信息,提交表单信息.其他用户填写 ...

  8. Faster-RCNN.pytorch的搭建、使用过程详解(适配PyTorch 1.0以上版本)

    Faster-RCNN.pytorch的搭建.使用过程详解 引言 faster-rcnn pytorch代码下载 faster-rcnn pytorch配置过程 faster-rcnn pytorch ...

  9. SpringBoot之整合Redis分析和实现-基于Spring Boot2.0.2版本

    一.背景介绍 公司最近的新项目在进行技术框架升级,基于的Spring Boot的版本是2.0.2,整合Redis数据库.网上基于2.X版本的整个Redis少之又少,中间踩了不少坑,特此把整合过程记录, ...

最新文章

  1. Spring Boot数据库操作原理及整合druid数据源和mybatis
  2. boost::math::negative_binomial用法的测试程序
  3. vscode删除文件夹,VSCode:删除文件中的所有注释
  4. Thinkphp3.2 分页带中文参数报错
  5. 字节跳动AI Lab 算法岗专属内推码!
  6. MyBatis理解与掌握(输入与输出)
  7. 他曾经复读才考上三本,如今让华为开出 201 万年薪(其实还拒绝了 360 万 offer)...
  8. [译] 如何在 keras 中使用循环神经网络创作音乐
  9. mysqlserver 下载安装
  10. word在线预览 (含doc,docx等)
  11. vnc远程桌面很慢_vnc远程桌面-桌面空白解决方案
  12. RedHat7.5最小化安装之后一些配置
  13. c# autoscroll_禁用Firefox中令人讨厌的AutoScroll功能
  14. Android studio运行出错 compilation failed see the compiler error output for details.
  15. 学生宿舍管理系统java课设_JAVA学生宿舍管理系统
  16. 移动端电影院社交来啦 约上ta看一场电影
  17. 植物大战僵尸——最强阵容
  18. Windows 10 安装STF实战
  19. 汽车4GTBOX,新能源汽车数据采集终端T-BOX,汽车终端等软/硬件的研发,4G新能源汽车TBOX4G定位器方案TBOX方案
  20. 第一篇:0到9的数字游戏的介绍与性质

热门文章

  1. 矩阵的特征值与特征向量
  2. 计算机键盘上的基准件有哪些,基准件
  3. 通过实验带你了解降噪耳机的工作原理-道合顺大数据infinigo
  4. ffmpeg硬解码延迟_FFmpeg硬件加速
  5. java邮件会议邀请_javamail+ical4j发送会议邀请
  6. Ubuntu 18.04 尝试安装 NVIDIA 显卡驱动
  7. win10/win11+NVIDIA MX350笔记本自带显卡+CUDA10.2+Python3.6+Anaconda3从零开始配置深度学习环境
  8. 使用flex 布局时,英文不自动换行
  9. OFDM系统之利用L-STF和L-LTF序列进行同步
  10. 全球与中国台式分光辐射计市场深度研究分析报告