快到过农历年了,微信红包也越来越多了,出现了好多红包*程序,就很好奇如何实现的,于是自己研究了一番,亲自写了个微信抢红包的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仿硬币转动微信红包动画效果
# 抢红包
# 在这里
# 辅助功能
# 可以实现
# 回调
# 小编
# 新建一个
# 的是
# 判断是否
# 是一个
# 在此
# 他就
# 我们可以
# 给大家
# 很可能
# 写了
# 如果不是
# 时就
# 当我们
# 到过
相关文章:
文字头像制作网站推荐软件,醒图能自动配文字吗?
香港服务器WordPress建站指南:SEO优化与高效部署策略
再谈Python中的字符串与字符编码(推荐)
建站之星如何防范黑客攻击与数据泄露?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
建站上传速度慢?如何优化加速网站加载效率?
公司门户网站制作流程,华为官网怎么做?
如何快速重置建站主机并恢复默认配置?
javascript基本数据类型及类型检测常用方法小结
青岛网站建设如何选择本地服务器?
如何正确下载安装西数主机建站助手?
高性价比服务器租赁——企业级配置与24小时运维服务
Python文件管理规范_工程实践说明【指导】
制作公司内部网站有哪些,内网如何建网站?
红河网站制作公司,红河事业单位身份证如何上传?
如何选择靠谱的建站公司加盟品牌?
seo网站制作优化,网站SEO优化步骤有哪些?
ppt制作免费网站有哪些,ppt模板免费下载网站?
想学网站制作怎么学,建立一个网站要花费多少?
中山网站制作网页,中山新生登记系统登记流程?
如何有效防御Web建站篡改攻击?
网站制作报价单模板图片,小松挖机官方网站报价?
建站ABC备案流程中有哪些关键注意事项?
如何配置IIS站点权限与局域网访问?
外贸公司网站制作哪家好,maersk船公司官网?
,怎么用自己头像做动态表情包?
如何用PHP快速搭建高效网站?分步指南
建站之星×万网:智能建站系统+自助建站平台一键生成
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何用PHP工具快速搭建高效网站?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何用PHP快速搭建CMS系统?
如何零基础在云服务器搭建WordPress站点?
如何解决VPS建站LNMP环境配置常见问题?
制作网站怎么制作,*游戏网站怎么搭建?
建站之星3.0如何解决常见操作问题?
网站制作企业,网站的banner和导航栏是指什么?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
如何通过FTP空间快速搭建安全高效网站?
如何快速搭建高效简练网站?
如何用花生壳三步快速搭建专属网站?
如何通过智能用户系统一键生成高效建站方案?
如何快速生成凡客建站的专业级图册?
如何快速搭建支持数据库操作的智能建站平台?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
如何在云主机快速搭建网站站点?
制作网站外包平台,自动化接单网站有哪些?
广州美橙建站如何快速搭建多端合一网站?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
*请认真填写需求信息,我们会在24小时内与您取得联系。