快到过农历年了,微信红包也越来越多了,出现了好多红包*程序,就很好奇如何实现的,于是自己研究了一番,亲自写了个微信抢红包的APP。现在就一步一步来实现它。

实现思路
微信抢红包程序开启时候,他就可以随时识别、捕获红包,服务可以实现正在功能,当我们开启服务的时候,服务就不停的在后台运行,不停地轮询着微信里面的消息,当发现红包时候就立即打开微信红包所在的界面。但是他怎识别红包呢?需要找到微信抢红包里面节点的view,当找到对应的view,在获取view的关键字或者id,根据关键字或者id,自动的模拟点击,拆开红包。这里有一个AccessibilityService的服务,他是一个辅助类,可以实现这些功能。
AccessibilityService辅助类
AccessibilityService是一个辅助类,可以监听我们手机的焦点,窗口变化,按钮点击,声音提示等等,但是必须手动开启,不能通过代码开启,存在于设置里面的辅助功能,开启他我们可以增强互动性。现在来来使用他实现抢红包功能:
1、新建一个类QiangHongBaoService继承自AccessibilityService
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
//获取事件类型
int type = event.getEventType();
//在这里进行事件过滤
}
2、注册清单文件
<service
android:name=".QiangHongBaoService"
android:label="@string/app_name"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter android:priority="1000">
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/envelope_service_config"/>
</service>
新建一个xml文件夹,创建envelope_service_config文件
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_description" android:notificationTimeout="100" android:packageNames="com.tencent.mm" />
记得加上网络权限:<uses-permission Android:name="android.permission.VIBRATE" />
抢红包业务逻辑处理
在微信抢红包界面上只关心两个事件类型:
1、AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED//监听通知栏消息
在监听通知栏消息界面主要是监听每次微信发过来的消息显示在通知栏时,获取消息,当发现获取的消息含有“微信红包”时就会立即打开 红包所显示的界面。
/**
* 从知消息栏打开微信聊天界面
* @param event
*/
private void openNotification(AccessibilityEvent event) {
if (event.getParcelableData() != null && event.getParcelableData() instanceof Notification) {
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentIntent;
try {
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
}
}
2、AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED//当前窗口变化,是否进入微信聊天界面
在这里需要根据包名判断是否是聊天界面,如果是则点中红包,如果不是判断是否是拆红包界面,如果是则拆开,执行拆红包动作。
聊天界面的包名:com.tencent.mm.ui.LauncherUI
拆红包界面的包名:com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI
/**
* 点中红包
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void clickHongBao() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo == null) {
return;
}
List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(ENVLOP_OPEN_KEY);
if (list.isEmpty()) {
list = nodeInfo.findAccessibilityNodeInfosByText(ENVELOPE_TEXT_KEY);
for (AccessibilityNodeInfo n : list) {
n.performAction(AccessibilityNodeInfo.ACTION_CLICK);
break;
}
} else {
//最新的红包领起
for (int i = list.size() - 1; i >= 0; i--) {
AccessibilityNodeInfo parent = list.get(i).getParent();
if (parent != null) {
parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);
break;
}
}
}
}
/**
*拆红包
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
private void openHongBao() {
AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
if (rootInActiveWindow == null) {
return;
}
List<AccessibilityNodeInfo> nodeInfos = rootInActiveWindow.findAccessibilityNodeInfosByViewId(ENVLOP_CHECKED_KEY);
for (AccessibilityNodeInfo nodeInfo : nodeInfos) {
nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
上例中的拆红包是依据控件的id拆开的,也可以按照关键字“拆红包”执行。但是效率略低于根据id拆红包,这样很可能影响抢红包的效率,需要注意的是拆红包的id在微信不同版本中是不一样的,所以需要经常改变,比较麻烦。此外当AccessibilityService服务被关闭时会回调onInterrupt方法,当连接上时会回调onServiceConnected方法,在这里可以做一些提示性的工作。
抢红包功能的开启
微信抢红包功能是通过手动开启的,直接在设置里面找到辅助功能,点击开启,为了方便,给activity设置一个按钮,采用隐式意图的方式,直接跳转至服务功能。
//打开系统设置中辅助功能 Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivity(intent);
到了这里微信抢红包的而核心功能介绍完了,抢红包的效率还受网络,手机内存大小,系统流畅度的影响,以及服务优先级等等因素的影响。这里只是学习一下,千万别用来经常*来抢红包,小心被封号哦!!!
源码已经上传至github,需要的点击打开链接
https://github.com/yoonerloop/WebEnvelope
以上所述是小编给大家介绍的Android微信抢红包功能的实现原理浅析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# 微信抢红包实现
# 抢红包实现
# Android AccessibilityService实现微信抢红包插件
# 教你一步步实现Android微信自动抢红包
# Android中微信抢红包插件原理解析及开发思路
# Android实现微信自动抢红包的程序
# 分享Android微信红包插件
# Android仿硬币转动微信红包动画效果
# 抢红包
# 在这里
# 辅助功能
# 可以实现
# 回调
# 小编
# 新建一个
# 的是
# 判断是否
# 是一个
# 在此
# 他就
# 我们可以
# 给大家
# 很可能
# 写了
# 如果不是
# 时就
# 当我们
# 到过
相关文章:
建站主机如何选?高性价比方案全解析
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
Swift中循环语句中的转移语句 break 和 continue
如何破解联通资金短缺导致的基站建设难题?
教学网站制作软件,学习*后期制作的网站有哪些?
装修招标网站设计制作流程,装修招标流程?
如何打造高效商业网站?建站目的决定转化率
,南京靠谱的征婚网站?
中山网站制作网页,中山新生登记系统登记流程?
网站按钮制作软件,如何实现网页中按钮的自动点击?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
h5在线制作网站电脑版下载,h5网页制作软件?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
如何在Windows虚拟主机上快速搭建网站?
模具网站制作流程,如何找模具客户?
建站之星后台管理如何实现高效配置?
c# 在高并发场景下,委托和接口调用的性能对比
建站OpenVZ教程与优化策略:配置指南与性能提升
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何解决VPS建站LNMP环境配置常见问题?
海南网站制作公司有哪些,海口网是哪家的?
如何在IIS中配置站点IP、端口及主机头?
宝塔建站无法访问?如何排查配置与端口问题?
建站上市公司网站建设方案与SEO优化服务定制指南
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
网站制作模板下载什么软件,ppt模板免费下载网站?
jQuery 常见小例汇总
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
微信h5制作网站有哪些,免费微信H5页面制作工具?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
家庭建站与云服务器建站,如何选择更优?
如何在万网开始建站?分步指南解析
如何彻底卸载建站之星软件?
深圳网站制作的公司有哪些,dido官方网站?
如何使用Golang安装API文档生成工具_快速生成接口文档
建站主机是什么?如何选择适合的建站主机?
红河网站制作公司,红河事业单位身份证如何上传?
如何快速搭建FTP站点实现文件共享?
如何快速搭建高效WAP手机网站?
建设网站制作价格,怎样建立自己的公司网站?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
建站之星CMS五站合一模板配置与SEO优化指南
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
,购物网站怎么盈利呢?
*请认真填写需求信息,我们会在24小时内与您取得联系。