我想开发一个红包辅助微信插件开发抢红包,找不到做这个红包微信插件开发抢红包的开发者,我需要怎样才能联系这个开发者

有没有QQ发个红包排雷辅助软件挂—APP工作室 欢迎您
[购买软件加客服微信:A]3月22日消息,来自外媒消息,美国券商Cowen & Company的看穿师蒂莫西&阿库里(Timothy Arcuri)相信新一代iPhone将引爆苹果股票上涨,阿库里周一将苹果股票目标价上调至155美元,原因是苹果将在今年晚些时候发布iPhone 8。
【科技讯】7月15日消息,早前就曾报道过很多苹果8的相关消息,虽然苹果8什么时候上市暂时不得而知,但是苹果8的相关配置及外观设计已经有很多爆料了。不得不说,苹果8的概念设计完美无缺,但是比起iPhone
X却总是差些味道。设计师Tejas Pawar近日推出一款iPhone X的概念机,主打曲面设计,充电。一起了解一下iPhone
X的相关消息吧。
[24小时在线,购买软件加客服微信:]
[购买软件加客服微信:A]
据开发者透露10.5英寸iPad Pro的细节,与此前曝光的一样,Xcode 8.3中的FPS计数器现在已经到了120fps,这已经远超此前的60FPS了。
这位开发者同时表示,更新的FPS计数器会针对不同的情况做出反应&&当只有一个页面渲染时,0-60FPS计数器会被调出,而当有多个页面需要用OpenGLES渲染时,计数器则会切换至0-120FPS的版本。如果你没用软件玩那就一定输!
[24小时在线,购买软件加客服微信:]
微信QQ抢红包控制扫雷埋雷尾数挂
牛牛辅佐升级版三项
微信支付宝金额大小视透看穿仪
控制红包牛牛尾数
支付宝微信红包群隐身挂件安装
控制红包金额大小单双
控制器,抢
躲避小包,一元三包控制器
控制金额尾数后1位,后2位,抢豹子(霸子)
打破1. 支付宝,微信.陌陌.QQ.全通用。
打破2. 牛牛.接龙.骰子.剪刀石头布..1234.尾数.等等多种玩法吞并一体。
打破3. 版别更新自动提示。[24小时在线,购买软件加客服微信:A]
软件,打开。
2、在&设置&&辅助功能&&微信抢红包挂神器&里,点击&开启&。
3、打开微信,在&设置&&新消息提醒&里,前两个选项&接受新消息通知&和&通知显示消息详情&均勾选&开启&。(好多人就是这一步忘记做了)
4、打开某一个微信群组,点击右上角,往下拉,&消息免打扰&选项,勾选&关闭&。(也就是要把&群消息的提示保持在开启&的状态,这样才能触系统发底层接口。)
5、在微信抢红包挂神器,勾选&开启自动抢红包&&牛牛金额调改&&接龙金额调改&&三分金额调改&等等。
6、如果你还没有成功,首先确认你是智能(包括苹果需越狱安卓直接可用),其次需要你的微信升级到版本。-------[24小时在线,购买软件加客服微信:]
[24小时在线,购买软件加客服微信:A]
& & & & & &&&
红包埋雷软件。QQ红包扫雷软件。陌陌红包牛牛软件。随意设置牛牛固定操控牛牛。微信红包操控尾数。固定数字。固定金额。红包控三公玩法。制尾数。固定数字。固定金额。合适玩单双。。尾数玩法。QQ红包操控尾数。固定数字.固定金额。陌陌红包操控尾数。固定数字.固定金额。合适玩单双..尾数玩法。
[24小时在线,购买软件加客服微信:]
微信 QQ 支付宝 陌陌 抢红包控制 扫雷 埋雷尾数 三公 牛牛 牌九 棋牌&
1.微信红包群隐身挂件
2.微信红包埋雷扫雷避雷接龙尾数挂
3.控制红包金额大小单双
4.随意抢单双尾数 单双尾数中间抢+抢尾包
5.控制抢最好手气,抢最好
&6.躲避最小包,一元三包控制器
7.控制金额尾数后1位,后2位,抢豹子(霸子)
8.抢红包王软件版软件功能
9.躲避两个最小,躲避第二小。
10.中间抢牛牛11.首尾相加,随机地雷玩法。
12.尾数玩法
13.数值等,大小综合玩法。
14.单包看穿 &看穿红包&
15.爬楼梯玩法
16.双A躲避最小最大
17.大小抢中间和尾包2合1&&&[购买软件加客服微信:]
18.尾数抢中间和尾包2合1功能综合:秒抢.延时秒数.看穿包.不抢最小包.双尾.不抢尾数最小包.随意抢包设置.金额单位安全值设置.中间抢.排名位置雷.各种位置数值设置等...
1、下载这个辅助软件,打开。
2、在&设置&&辅助功能&&微信抢红包辅助&里,点击&开启&。&1、下载这个辅助,打开。
3、打开微信,在&设置&&新消息提醒&里,前两个选项&接受新消息通知&和&通知显示消息详情&均勾选&开启&。(好多人就是这一步忘记做了)
4、打开某一个微信群组,点击右上角,往下拉,&消息免打扰&选项,勾选&关闭&。(也就是要把&群消息的提示保持在开启&的状态,这样才能触系统发底层接口。)
5、在微信抢红包**神器,勾选&开启自动抢红包&&牛牛金额调改&&接龙金额调改&&三公金额调改&等等。
1.随便调改红包三位尾数数字,也可调成随机号码,比如1,1,2,3,4,5,......扫雷,牛牛,三公,接龙哪都不是事!!2.开启此软件可以在时间帮你抢到别人的红包,扫雷,牛牛,三公,金花,接龙哪都不是事!!。3.此软件可以帮你抢到数额较大的红包,扫雷,牛牛,三公,金花,接龙哪都不是事!!。4软件可以调整微信里面摇色子点数,你想摇几便是几,扫雷,牛牛,三公,金花,接龙哪都不是事
微信红包尾数&器是一款专业的微信抢红包软件,可以控制抢红包金额的尾数,设定好金额数值之后,就可以自动来抢,安全快捷,方便使用,快来下载微信红包尾数&器体验吧!
微信红包尾数&器介绍:
专业的抢红包辅助工具,控制到红包的金额和尾数大小等,躲避小或者等等,全自动的模式,零秒的速度拿到红包的的手气!
微信红包尾数控制器功能:
1、自动抢红包
2、设定红包金额的尾数,可大可小
3、一键设定,后台运行
微信抢红包技巧:
1、确保网络给力,如果你的网络延迟比别人高的时候,后面就不用看了,建议大家使用wifi。
2、很多人说,如果你知道红包雨要来的时候,记得把后台运行程序先关掉,平时没事多清除一下。
3、点击下图红色部分,不停的点击你群的消息的右边空白地方,也就是红色框没的红色部分。因为这个出现红包的时候,时间点击到,进入就可以抢到(亲自试过,发微信红包下一秒就能点击进入,也是记者每次能抢到红包的原因)。
微信红包尾数助手是出的抢红包软件,用户试用这款软件可以快速的抢红包,并可以由用户自由设定红包尾数,还拥有全程后台自动抢红包功能,无需用户全程守候,轻松获得大量红包哦,有需要的朋友可以来下载使用!
微信红包助手尾数牛牛特色:
1、微信红包尾数助手是一款比牛牛功能更加强大的抢红包软件!
2、自动挂机,用户只要开启软件,就会全程后台自动挂机抢红包,无需用户时时盯着软件。
3、安全保障,使用这款软件的用户可以非常安心,没有被封号的危险存在。
4、快速稳定,查看抢红包记录,使用这款软件的用户肯定是排在位的!
微信红包尾数助手功能:
1、避小功能: _并躲避小包或包;
2、尾数功能: _并躲避单双尾包或小包;
3、抢中间包功能: 可设置低于或者高于安全值抢(金额大小);
4、尾数抢中间包功能:可设置低于或者高于安全值抢;
5、牛牛抢中间包功能:可设置低于或者高于安全值抢。
[购买软件加客服微信:]
&&&&&&&&&有用是咱们的许诺&&&&&&&&&
&&&&&&&&&客户挣钱是我们的使命&&&&&&&&&
如果你没用软件玩那就一定输
购买软件加客服微信:
(本公司只有个人微-信:A企业&公众微-信均为诈欺)
&&&&&&&&&实用是咱们的许诺&&&&&&&&
&&&&&&&&客户挣钱是我们的使命&&&&&&原标题:有没有QQ发个红包排雷辅助软件挂—APP工作室 欢迎您
免责声明:以上所展示的信息由网友自行发布,内容的真实性、准确性和合法性由发布者负责。易搜网对此不承担任何保证责任。任何单位或个人如对以上内容有权利主张(包括但不限于侵犯著作权、商业信誉等),请与我们联系并出示相关证据,我们将按国家相关法规即时移除。13:42:54 UTC
实现抢红包的基本流程
收到红包消息 (MessageCenter)
列表上出现一个红包组件( RedPocketButton )
点击进入红包页面
点击”抢红包“按钮
给服务器发一个请求,服务器告诉我抢到了多少钱,以及哪些人抢到了红白以及份额
实现自动抢红包插件需要知道哪些信息
如何自动拆红包?代码里面拆红包的逻辑再哪里?是否能直接调用来拆红包?如果不能需要准备哪些前置条件?
我们什么时候触发抢红包这个动作?
点击红包后,进入抢红包详情页, 其视图结构是:UIWindow--DTOpenLuckyMoneyView----DTOpenLuckyMoneyEntityView
查看头文件信息(Flex/class-dump)
@interface DTOpenLuckyMoneyEntityView:UIView{
id &DTOpenLuckyMoneyEntityViewDelegate& *
DTBizRedEnvelopClusterPickingStatus *pickingS
UIButton *_openLuckyMoneyB
- didClickOpenLuckyMoneyBtn:(id)
- openLuckyMoney:(CGFloat) stopDuration:(CGFloat) completionBlock:id
- performLoading
- stopLoading
@interface DTOpenLuckyMoneyView:UIView{
id&DTOpenLuckyMoneyViewDelegte& *delegate
DTBizRedEnvelopClusterPickingStatus *statusModel
-(void)utOpenRedEnvelop:(id)
-(void)utSeeRedEnvelop:(id)
- (void)beginLoading
- (void)endLoading
- (void)didClickOpenLuckyMoney:(id)
如何快速确定这个"拆"红包Button的 selector ?
会是这里的- didClickOpenLuckyMoneyBtn:(id) 吗?
在Flex中 查看UIButton的 _targetActions ,这是一个可变数组,每个item是一个UIControlTargetAction的对象。可以看到 _action = - didClickOpenLuckyMoneyBtn:(id) , _target 是一个 DTOpenLuckyMoneyEntityView:UIView 类型的对象,说明我们的猜测是对的。
同时我们发现DTOpenLuckyMoneyEntityView视图对象 的 delegate 是一个 DTOpenLuckyMoneyView 类型对象,也就是父 View 作为 delegate。
从目前来看,DTOpenLuckyMoneyView 有较大可能 负责拆 红包的逻辑,看下- (void)didClickOpenLuckyMoney: 方法的汇编逻辑:
大概逻辑是:
- (void)didClickOpenLuckyMoney:(id){
statusModel];
[self utOpenRedEnvelop:]
[self beginLoading];
id factory = [DTRedEnvelopServiceFactory defaultServiceIMP];
[[self redEnvelopCluster] sender] -&x25-&x2
[self clusterId] -& x28-&x3
[factory pickRedEnvelopCluster:x2 clusterId:x3 successBlock: x4, failureBlock : x5 ] //
看到这里,这里的pickRedEnvelopCluster:clusterId: successBlock:failureBlock:这个方法极有可能就是拆红包的api
,通过搜索
pickRedEnvelopCluster:clusterId: successBlock:failureBlock: 这个方法,不难找出哪些类有这个方法,从而定位到这是哪个类的方法。
经过搜索,这里的factory 就是 一个DTRedEnvelopServiceIMP对象了。我们看下方法的原型:
- (void)pickRedEnvelopCluster:(long long)arg1 clusterId:(id)arg2 successBlock:(CDUnknownBlockType)arg3 failureBlock:(CDUnknownBlockType)arg4;
cluster: sender
从名字上看可能是发送红包的用户id 。我发了一个红包,通过查看我的个人信息用户(比如信息展示页面),查询到 我的 uid 与这里的 sender 一致。
clusterId:
群相关 id, 形如 5PpGVx79
successBlock:
failureBlock:
同时我们发现,DTBizRedEnvelopClusterPickingStatus-&DTBizRedEnvelopCluster 这里保存有红包的基本信息,我们可以使用这里的数据,call下这个api,测试看能否拆开红包。比如发了一红包后 ,sender =
,clusterId = @“5PpKkC3K”
我们可以使用cycript/Flex
call 下这个api,传入红包数据看下,这个api 是否能拆开红包。如下:
[[DTRedEnvelopServiceFactory defaultServiceIMP] pickRedEnvelopCluster: clusterId:@"5PpKkC3K" successBlock:nil failurelock:nil]
发现红包被领取了。因此确认pickRedEnvelopCluster:clusterId: successBlock:failureBlock: 就是拆红包的方法。
什么时机拆红包?
拆红包的参数数据 sender, clusterId 从哪里来?
但是如果没有拆红白的视图,我们就没法使用 DTBizRedEnvelopClusterPickingStatus-&DTBizRedEnvelopCluster 里面的信息? 有没有可能在其它地方获得 发红包用户id
这两个信息呢?
可以看到,每当收到消息时,在首页列表页上都能跟新到最新的消息,因此首页上一定有接收红包信息相关的线索。如果这里也有我们需要的红包数据,问题就解决了。
会话列表页是DTConversationListController :
@interface DTConversationListController:DTViewController{
DTConversationListDataSource *dataSource;
DTTableView *tableV // delegate/dataSource 是 DTConversationListController
- observeValueForKeyPath(id) ofObject:(id) change(id) context(void *)
- onRecvMsg:(id)
@interface DTConversationListDataSource: NSObject{
LWFetchedResultsController *fetchC // 其delegate 就是 DTConversationListDataSource 对象
DTTableView *tableV // 数据更新后,在这里直接update tableView
(void)asyncLoadAllLocalC
- (void)loadAllC
(void)controller:(id) didChangeObject:(id) atIndex:(NSInteger) forChangeType:(NSInteger) newIndex:(NSUinteger) // 应该是 LWFetchedResultsController delegate 方法
当收到一条消息时,DTConversationListDataSource 哪个方法会收到消息? 是“-
(void)controller:(id) didChangeObject:(id) atIndex:(NSInteger) forChangeType:(NSInteger) newIndex:(NSUinteger)” 这个方法吗? 他的参数里面都有哪些信息?
LLDB + debugserver 断点调试如下:
可以看到,收到(红包)消息时,切实可以出发断点,查看消息内容,确实是我们想要的消息数据:
通过各种测试,我们发现:
//单人红包
"contentType" : 902,
"attachments" : [
"type" : 902,
"extension" : {
"amount" : "1.00",
"clusterid" : "3ga8WJ4X",
"size" : "1",
"congrats" : "恭喜发财,大吉大利!",
"sid" : "",
"contentType" : 901,
"attachments" : [
"type" : 901,
"extension" : {
"amount" : "1.00",
"clusterid" : "66dAJ8IT",
"size" : "3",
"congrats" : "恭喜发财,大吉大利!",
"sid" : "",
//正值元旦季节,元旦红包数据格式如下
"contentType" : 905,
"attachments" : [
"extension" : {
"amount" : "0.10",
"clusterid" : "FPGjJ5No",
"p_name" : "元旦红包",
"sid" : "",
"size" : "1",
"congrats" : "十分祝福!",
"sname" : “xxx"
"isPreload" : false
可以看到 901 是群红包,902 是个人红包, 905 是元旦红包。
Theos 工程
总结流程下:
hook -[DTConversationListDataSource controller:didChangeObject:atIndex:forChangeType:newIndex:]
收到消息是得到红包数据 WKBizConversation-&latestMessage-&attachmentsJson
从attachmentsJson 中解析出抢红包需要的参数sender,clusterId
调用[[DTRedEnvelopServiceFactory defaultServiceIMP] pickRedEnvelopCluster:sender clusterId:clusterId successBlock:nil failureBlock:nil]; 完成自动抢红包动作
其中 bundleid = com.laiwang.DingTalk
08:38:36 UTC
赞一下楼主,说一下我的hook过程,我使用opendev开发的dylib,然后动态注入到load commands里,然后重新签名。看了下楼主的代码,和楼主有些差异点:
我是在收到消息,进行消息model转换的地方加了hook代码,这点感觉楼主的更智能,从数据源变更的时候触发抢红包。
dd抢红包过程,主要发起了四种请求:更新已读状态、视图状态请求;检测支付宝绑定请求;检测红包状态请求(点击红包的时候);拆红包的请求。个人觉得还是按照dd的流程来处理好一些,这样可能能避免一些反作弊规则。
03:58:08 UTC
谢谢分享,比我分析的仔细~
12:22:33 UTC
钉钉做了签名判断,这个现在还能用吗?
13:06:00 UTC抢红包插件实现原理浅析
抢红包,先看效果图~
实现自动抢红包,解决问题有两点:
一:如何实时监听发红包的事件
二:如何在红包到来的时候自动进入页面并自动点击红包
一、如何获取红包到来的事件
为了获取红包到来状态栏的变化,我们要用到一个类:Accessibility
许多使用者因为各种情况导致他们要以不同的方式与手机交互。
这包括了有些用户由于视力上,身体上,年龄上的问题致使他们不能看完整的屏幕或者使用触屏,也包括了无法很好接收到语音信息和提示的听力能力比较弱的用户。
Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音(这个不支持中文),触觉反馈,手势操作,轨迹球和手柄操作。
OK,了解到这一点,那么接下来就顺利点了,首先来看看Accessibility以及AccessibilityService的使用
新建一个类继承AccessibilityService,并在AndroidManifest文件里注册它:
在子类QiangHongBaoService里实现几个重要的重载方法:
onServiceConnected() - 可选。会在成功连接上你的服务的时候调用这个方法,在这个方法里你可以做一下初始化工作,例如设备的声音震动管理,也可以调用setServiceInfo()进行配置工作。
onAccessibilityEvent() - 必须。通过这个函数可以接收系统发送来的AccessibilityEvent,接收来的AccessibilityEvent是经过过滤的,过滤是在配置工作时设置的。
onInterrupt() - 必须。这个在系统想要中断AccessibilityService返给的响应时会调用。在整个生命周期里会被调用多次。
onUnbind() - 可选。在系统将要关闭这个AccessibilityService会被调用。在这个方法中进行一些释放资源的工作。
然后在/res/xml/accessibility_service_config.xml:
二、主要关注点以及如何在红包到来的时候自动进入页面并自动点击红包
在onAccessibilityEvent方法中监听状态栏的变化,主要有:AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED、AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED、AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED
在响应窗体以及窗体内容变化时处理相关逻辑,获取带微信消息时以下代码打开消息:
//将微信的通知栏消息打开
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentI
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
具体代码网上有很多,一般都是通过:findAccessibilityNodeInfosByText、findAccessibilityNodeInfosByViewId查找文本或者资源节点进行点击操作,但新版微信开红包页面进行了处理,没有文本信息,而如果采用:
图中resouces-id这种形式就可能出现这种情况:
在了解整个核心后,获取事件不外乎就是通过文本与id判断,那么就可以将文本改为图标方式,将id改为动态id(每次显示都是随机生成),这样一来就可以提高外挂的门槛。
如何进行规避呢,目前我想的是既然开红包的页面文本和ID都有可能会变,那我们能不能找个不变的进行判断呢,考虑过后,我觉得最可能不变的地方就是开红包这个按钮的位置,也就是图中的bounds,于是在思考过后有了下面的处理:
for (int i = 0; i & nodeInfo.getChildCount(); i++) {
//Log.e(&TAG&, &getViewIdResourceName :&+nodeInfo.getChild(i).getViewIdResourceName());
Rect outBounds = new Rect();
nodeInfo.getChild(i).getBoundsInScreen(outBounds);
int left_dp = px2dip(this, 400);
int top_dp = px2dip(this, 1035);
int right_dp = px2dip(this, 682);
int bottom_dp = px2dip(this, 1320);
int left_px = dip2px(this, left_dp);
int top_px = dip2px(this, top_dp);
int right_px = dip2px(this, right_dp);
int bottom_px = dip2px(this, bottom_dp);
Rect mStandar = new Rect(left_px,top_px,right_px,bottom_px);
if(mStandar.contains(outBounds)){
Log.e(&TAG&, &outBounds.left :&+outBounds.left+&;outBounds.top :&+outBounds.top+&;outBounds.right :&+outBounds.right+&;outBounds.bottom :&+outBounds.bottom);
nodeInfo.getChild(i).performAction(AccessibilityNodeInfo.ACTION_CLICK);
这里取的矩形区域要比按钮区域稍大点,然后判断到开红包页面按钮是否在我们预先设置的区域内,如果在,我们直接进行点击开红包操作:AccessibilityNodeInfo.ACTION_CLICK。
其他比如如何防止重复抢等细节问题,也是要处理的问题。
好了,直接放下关键代码,仅供参考:
package com.zkhb.weixinqinghongbao.
import java.util.D
import java.util.L
import android.accessibilityservice.AccessibilityS
import android.annotation.SuppressL
import android.annotation.TargetA
import android.app.KeyguardM
import android.app.KeyguardManager.KeyguardL
import android.app.N
import android.app.NotificationM
import android.app.PendingI
import android.content.C
import android.content.I
import android.graphics.R
import android.os.B
import android.os.H
import android.os.PowerM
import android.os.PowerManager.WakeL
import android.util.L
import android.view.accessibility.AccessibilityE
import android.view.accessibility.AccessibilityM
import android.view.accessibility.AccessibilityNodeI
import android.widget.T
import com.zkhb.weixinqinghongbao.MainA
import com.zkhb.weixinqinghongbao.R;
import com.zkhb.weixinqinghongbao.entity.HongBaoI
import com.zkhb.weixinqinghongbao.util.DateFormatU
import com.zkhb.weixinqinghongbao.util.LogU
* 抢红包服务
@SuppressLint(&NewApi&)
public class QiangHongBaoService extends AccessibilityService {
static final String TAG = &QiangHongBao&;
/** 微信的包名*/
static final String WECHAT_PACKAGENAME = &com.tencent.mm&;
/** 红包消息的关键字*/
static final String HONGBAO_TEXT_KEY = &[微信红包]&;
/** 红包消息的关键字*/
static final String HONGBAO_TEXT_KEY1 = &微信红包&;
private static final int ENVELOPE_RETURN = 0;
private static final String LOCK_TAG = &屏幕&;
Handler handler = new Handler();
/** 是否在抢红包界面里*/
public boolean isInMM=
/** 是否可以点击*/
public boolean ISCLICKED=
/** 是否进入过拆红包界面*/
public static boolean ISCOMINQIANGCHB=
public static boolean ISCOMINQIANGCHB2=
//真正的判断
public static boolean ISCOMINQIANGCHB3=
/** 是否来自通知栏*/
private static boolean ISCOMNOTIFY=
private PowerM
//点亮屏幕
private WakeLock mWakeL
//解锁锁定屏幕
private KeyguardLock keyguardL
/**判断之前用户是否锁屏
private static boolean islock=
/**通知服务 */
private NotificationManager n_
public void unlock(){
if(pm==null){
pm = (PowerManager) getApplication().getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();//如果为true,则表示屏幕&亮&了,否则屏幕&暗&了。
if(!isScreenOn){
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
keyguardLock = keyguardManager.newKeyguardLock(LOCK_TAG);
keyguardLock.disableKeyguard();
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, LOCK_TAG);
mWakeLock.acquire();
public void lock(){
if(islock){
//释放屏幕常亮锁
if(null != mWakeLock) {
mWakeLock.release();
//屏幕锁定
if(keyguardLock!=null){
keyguardLock.reenableKeyguard();
public void onAccessibilityEvent(AccessibilityEvent event) {
final int eventType = event.getEventType();
(&事件----&& + event);
//通知栏事件
if(eventType == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
List texts = event.getText();
if(!texts.isEmpty()) {
for(CharSequence t : texts) {
String text = String.valueOf(t);
if(text.contains(HONGBAO_TEXT_KEY)) {
ISCOMNOTIFY=
ISCOMINQIANGCHB=
openNotify(event);
} else if(eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
openHongBao(event);
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
List findAccessibilityNodeInfosByText = nodeInfo.findAccessibilityNodeInfosByText(&领取红包&);
if(findAccessibilityNodeInfosByText.isEmpty()){
List text = event.getText();
if(text.size()&=0){
CharSequence charSequence = text.get(0);
if(charSequence.equals(&微信&)){
}else if(eventType==AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED && ISCOMNOTIFY){
openHongBao(event);
List InfoText = getRootInActiveWindow().findAccessibilityNodeInfosByText(&领取红包&);
if(!InfoText.isEmpty()){
checkKey2();
ISCOMNOTIFY=
/*@Override
protected boolean onKeyEvent(KeyEvent event) {
//return super.onKeyEvent(event);
public boolean onUnbind(Intent intent) {
Toast.makeText(this, &断开抢红包服务&, Toast.LENGTH_SHORT).show();
ISCOMINQIANGCHB=
ISCOMINQIANGCHB2=
ISCOMINQIANGCHB3=
ISCOMNOTIFY=
setNotification(&已关闭抢红包小助手服务~~&,Notification.FLAG_AUTO_CANCEL,&已关闭抢红包小助手服务~~~&);
return super.onUnbind(intent);
public void onInterrupt() {
Toast.makeText(this, &中断抢红包服务&, Toast.LENGTH_SHORT).show();
protected void onServiceConnected() {
super.onServiceConnected();
ISCOMINQIANGCHB=
ISCOMINQIANGCHB2=
ISCOMINQIANGCHB3=
ISCOMNOTIFY=
setNotification(&已开启抢红包小助手服务~~&,Notification.FLAG_NO_CLEAR,&已开启抢红包小助手服务~~~&);
Toast.makeText(this, &连接抢红包服务&, Toast.LENGTH_SHORT).show();
private void setNotification(String content,int flags,String title) {
if(n_manager==null){
n_manager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
n_manager.cancelAll();
Notification notification=new Notification(R.drawable.ic_launcher, content, System.currentTimeMillis());
notification.defaults |= Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,100,200,300}; //0毫秒后开始振动,振动100毫秒后停止,再过200毫秒后再次振动300毫秒
notification.vibrate=
notification.flags |= //表明在点击了通知栏中的&清除通知&后,此通知不清除,
Intent notificationIntent = new Intent(this,MainActivity.class); //点击该通知后要跳转的Activity
PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(),0,notificationIntent,0);
notification.setLatestEventInfo(getApplicationContext(), title, &进入微信抢红包~~&, contentIntent);
n_manager.notify(0, notification);
private void sendNotifyEvent(){
AccessibilityManager manager= (AccessibilityManager)getSystemService(ACCESSIBILITY_SERVICE);
if (!manager.isEnabled()) {
AccessibilityEvent event=AccessibilityEvent.obtain(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);
event.setPackageName(WECHAT_PACKAGENAME);
event.setClassName(Notification.class.getName());
CharSequence tickerText = HONGBAO_TEXT_KEY;
event.getText().add(tickerText);
manager.sendAccessibilityEvent(event);
/** 打开通知栏消息*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void openNotify(AccessibilityEvent event) {
if(event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {
//将微信的通知栏消息打开
Notification notification = (Notification) event.getParcelableData();
PendingIntent pendingIntent = notification.contentI
pendingIntent.send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void openHongBao(AccessibilityEvent event) {
if(&com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI&.equals(event.getClassName())) {
//点中了红包,下一步就是去拆红包
ISCOMINQIANGCHB=
ISCOMINQIANGCHB2=
checkKey1();
} else if(&com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI&.equals(event.getClassName())) {
//拆完红包后看详细的纪录界面
(&事件----&com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI&);
//nonething
if(ISCOMINQIANGCHB){
ISCOMINQIANGCHB=
if(ISCOMINQIANGCHB2){
ISCOMINQIANGCHB3=
ISCOMINQIANGCHB3=
checkKey3();
ISCOMINQIANGCHB=
ISCOMINQIANGCHB2=
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
if(getSharedPreferences(&config&, Context.MODE_PRIVATE).getBoolean(&auto&, false)){
performGlobalAction(AccessibilityService.GLOBAL_ACTION_HOME);
} else if(&com.tencent.mm.ui.LauncherUI&.equals(event.getClassName())) {
//在聊天界面,去点中红包
(&事件----&com.tencent.mm.ui.LauncherUI&);
checkKey2();
@SuppressLint(&NewApi&) @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void checkKey3() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if(nodeInfo == null) {
(&rootWindow为空333&);
List findAccessibilityNodeInfosByText = nodeInfo.findAccessibilityNodeInfosByText(&元&);
if(findAccessibilityNodeInfosByText.size()&=0){
AccessibilityNodeInfo accessibilityNodeInfo2 = findAccessibilityNodeInfosByText.get(0).getParent();
CharSequence money = accessibilityNodeInfo2.getChild(2).getText();
CharSequence name = accessibilityNodeInfo2.getChild(0).getText();
if(ISCOMINQIANGCHB3){
HongBaoInfo info=new HongBaoInfo();
info.setStrDateTime(DateFormatUtils.format(&yyyy-MM-dd HH:mm:ss&, new Date()));
info.setStrMoney(money+&&);
info.setStrName(name+&&);
info.save();
Toast.makeText(getApplicationContext(), money+&:::&+name, 0).show();
List findAccessibilityNodeInfosByViewId = nodeInfo.findAccessibilityNodeInfosByViewId(&com.tencent.mm:id/aw8&);
AccessibilityNodeInfo accessibilityNodeInfo = findAccessibilityNodeInfosByViewId.get(0);
CharSequence text = accessibilityNodeInfo.getText();
private void checkKey1() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if(nodeInfo == null) {
(&rootWindow为空11111&);
for (int i = 0; i & nodeInfo.getChildCount(); i++) {
Log.e(&TAG&, &getViewIdResourceName :&+nodeInfo.getChild(i).getViewIdResourceName());
Rect outBounds = new Rect();
nodeInfo.getChild(i).getBoundsInScreen(outBounds);
int left_dp = px2dip(this, 400);
int top_dp = px2dip(this, 1035);
int right_dp = px2dip(this, 682);
int bottom_dp = px2dip(this, 1320);
int left_px = dip2px(this, left_dp);
int top_px = dip2px(this, top_dp);
int right_px = dip2px(this, right_dp);
int bottom_px = dip2px(this, bottom_dp);
Rect mStandar = new Rect(left_px,top_px,right_px,bottom_px);
if(mStandar.contains(outBounds)){
Log.e(&TAG&, &outBounds.left :&+outBounds.left+&;outBounds.top :&+outBounds.top+&;outBounds.right :&+outBounds.right+&;outBounds.bottom :&+outBounds.bottom);
nodeInfo.getChild(i).performAction(AccessibilityNodeInfo.ACTION_CLICK);
nodeInfo.performAction(action)//[405,12]
//List list = nodeInfo.findAccessibilityNodeInfosByText(&拆红包&);
List list = nodeInfo.findAccessibilityNodeInfosByViewId(&com.tencent.mm:id/b5d&);
for(AccessibilityNodeInfo n : list) {
n.performAction(AccessibilityNodeInfo.ACTION_CLICK);
private void checkKey2() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if(nodeInfo == null) {
(&rootWindow为空222222&);
List list = nodeInfo.findAccessibilityNodeInfosByText(&领取红包&);
if(list.isEmpty()) {
list = nodeInfo.findAccessibilityNodeInfosByText(HONGBAO_TEXT_KEY);
for(AccessibilityNodeInfo n : list) {
(&--&微信红包:& + n);
n.performAction(AccessibilityNodeInfo.ACTION_CLICK);
//最新的红包领起
AccessibilityNodeInfo parent = list.get(list.size() - 1).getParent();
Log.w(TAG, &ISCLICKED::&+ISCLICKED)!ISCLICKED;
if(parent != null && !ISCOMINQIANGCHB) {
parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);
for(int i = list.size() - 1; i &= 0; i --) {
AccessibilityNodeInfo parent = list.get(i).getParent();
Log.i(TAG, &--&领取红包:& + parent);
if(parent != null && parent.isClickable()) {
parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
* @param info 当前节点
* @param matchFlag 需要匹配的文字
* @param type
操作的类型
@SuppressLint(&NewApi&)
public void recycle(AccessibilityNodeInfo info, String matchFlag, int type) {
if (info != null) {
if (info.getChildCount() == 0) {
CharSequence desrc = info.getContentDescription();
switch (type) {
case ENVELOPE_RETURN://返回
if (desrc != null && matchFlag.equals(info.getContentDescription().toString().trim())) {
if (info.isCheckable()) {
info.performAction(AccessibilityNodeInfo.ACTION_CLICK);
performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
int size = info.getChildCount();
for (int i = 0; i & i++) {
AccessibilityNodeInfo childInfo = info.getChild(i);
if (childInfo != null) {
(&index: & + i + & info& + childInfo.getClassName() + & : & + childInfo.getContentDescription()+& : &+info.getText());
recycle(childInfo, matchFlag, type);
public void onDestroy() {
super.onDestroy();
* 根据手机的分辨率从 dip 的单位 转成为 px(像素)
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().
return (int) (dpValue * scale + 0.5f);
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().
return (int) (pxValue / 3 + 0.5f);
//3是本人手机的设备密度
AccessibilityService还可以用在智能安装、虚拟按键上都有很多应用,这样的实践只是给我们一种解决问题另外的一种思路,问题嘛,总还是要解决的。}

我要回帖

更多关于 抢红包插件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信