时间:2015-08-26 来源:

微信抢红包源码 【移动开发】

关于抢红包的流程  

关键代码 package com.example.hook; import java.util.List; import android.accessibilityservice.AccessibilityService; import android.accessibilityservice.AccessibilityServiceInfo; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Build; import android.util.Log; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityNodeInfo; @SuppressLint("NewApi") public class HookService extends AccessibilityService { private final String TAG = "HookService"; /** * 当通知栏改变或界面改变时会触发该方法 */ @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event == null) return; if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { List<CharSequence> texts = event.getText(); if (!texts.isEmpty()) { for (CharSequence t : texts) { String text = String.valueOf(t); if (text.contains("[微信红包]")) {//获取通知栏字符div+css+js切图,若包含 [微信红包] 则模拟手指点击事件 handleNotificationChange(event); break; } } } } /** * 下面内容可以借助 Dump View Hierarchy For UI Automator 去分析微信UI结构 */ if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { System.out.println("TYPE_WINDOW_STATE_CHANGED --> "+event.getClassName()); if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI" .equals(event.getClassName())) { // 点中了红包,div+css+js切图下一步就是去拆红包 checkKey1(); } else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI" .equals(event.getClassName())) { // 拆完红包后看详细的纪录界面 // nonething } else if ("com.tencent.mm.ui.LauncherUI".equals(event .getClassName())) { // 在聊天界面页面div重构, "rootWindow为空"); return; } List<AccessibilityNodeInfo> list = nodeInfo .findAccessibilityNodeInfosByText("拆红包"); //获取包含 拆红包 文字的控件psd切图html,模拟点击事件,手机div+css拆开红包 for (AccessibilityNodeInfo n : list) { n.performAction(AccessibilityNodeInfo.ACTION_CLICK); } } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private void checkKey2() { AccessibilityNodeInfo nodeInfo = getRootInActiveWindow(); if (nodeInfo == null) { Log.w(TAG, "-->微信红包:" + n); n.performAction(AccessibilityNodeInfo.ACTION_CLICK); break; } } else { // 最新的红包领起 for (int i = list.size() - 1; i >= 0; i--) { AccessibilityNodeInfo parent = list.get(i).getParent(); Log.i(TAG, "-->领取红包:" + parent); if (parent != null) { parent.performAction(AccessibilityNodeInfo.ACTION_CLICK); try { //根据 Dump View Hierarchy For UI Automator 可以知道得到的控件的.getParent().getParent().getParent().getParent() //才是要点击的根布局,div页面 调用performAction(AccessibilityNodeInfo.ACTION_CLICK)触发点击事件 parent.getParent().getParent().getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK); System.out.println("click------"); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } break; } } } } public void handleNotificationChange(AccessibilityEvent event) { if (event == null) return; if (event.getEventType() != AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { return; } if (event.getParcelableData() instanceof Notification) { Notification notification = (Notification) event .getParcelableData(); if (!(event.getParcelableData() instanceof Notification)) { return; } notification = (Notification) event.getParcelableData(); PendingIntent pendingIntent = notification.contentIntent; try { pendingIntent.send(); //点击通知栏消息 System.out.println("send...."); } catch (PendingIntent.CanceledException e) { e.printStackTrace(); } } } @Override public void onInterrupt() { // TODO Auto-generated method stub } @Override public int onStartCommand(Intent intent, int startId) { // TODO Auto-generated method stub return super.onStartCommand(intent, startId); } }

这样就可以完成整个自动化完成抢红包的流程了psd切图html,所以核心就是找关键字,承接网页制作然后模拟用户点击事件web外包,就这么简单.以下详细说一下代码的实现.

3、在点击红包后,web外包会跳到com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI这个拆红包的Activity,当然老方法,网页切图制作找关键字拆红包或id,然后触发自动化点击事件.

以下是通过DDMS工具里的Dump View Hierarchy For UI Automator 去分析微信UI结构.

版权声明:本文为博主原创文章,网页重构报价未经博主允许不得转载.

工程下载链接   http://pan.baidu.com/s/1kTu4qAr

2、在通知栏跳进微信界面后承接网站前端,是去到com.tencent.mm.ui.LauncherUI这个Activity界面.我们知道,承接网站前端红包的消息上psd切图html,那我们就根据这个关键字找到相应的View,然后再触发ACTION_CLICK(点击事件);

1、在非微信消息列表界面,div切图排版收到通知消息的事件网页切图制作,判断通知栏里的文本是否有[微信红包]的关键字,网页切图制作有则可以判断为用户收到红包的消息(当然div+css+js切图,你可以故意发一条包括这个关键字的文本消息去整蛊你的朋友).然后,div+css+js切图我们就自动化触发这个消息的意图事件(Intent);

点击次数:5420
作者:
web前端行业资讯
Web new NewsList
微软发布WindowsServerBuild17074更新 ,,2018年01月18日凭借一个AI小功能,这款Google应用冲上苹果AppStore榜首 ,,2018年01月18日百度数据可视化实验室正式成立,发布深度学习可视化平台VisualDL ,,2018年01月18日OpenAI开源最新工具包,模型增大10倍只需额外增加20%计算时间 ,,2018年01月18日百度手机输入法8.0正式发布:支持多人语音速记 ,,2018年01月18日CSDN宣布收购TinyMind团队并升级为AI社区 ,,2018年01月18日甲骨文发布补丁修复英特尔芯片漏洞造成的问题 ,,2018年01月18日权威!官方发布CPU熔断和幽灵漏洞防范指引:附补丁下载 ,,2018年01月18日Oracle宣布新的JavaChampions ,,2018年01月18日Fedora28壁纸征集活动现已开幕:将持续至2月13日 ,,2018年01月18日苹果WebKit团队发布Speedometer2.0网页响应测试工具 ,,2018年01月18日百度输入法8.0后天发布:全感官AI输入 ,,2018年01月18日腾讯和乐高合作:共同研发智能玩具、游戏 ,,2018年01月18日HomePod上市日益临近智能音箱市场吸引力越来越大 ,,2018年01月18日英特尔公布修补漏洞后PC性能数据:8代CPU影响最小 ,,2018年01月18日云存储公司Dropbox秘密提交IPO申请估值超百亿美元 ,,2018年01月18日iPod之父:防手机上瘾无技术难度苹果谷歌应承担责任 ,,2018年01月18日芯片不安全英特尔云客户考虑转用AMD等对手处理器 ,,2018年01月18日2018年Java展望 ,,2018年01月18日区块链有多火?快播流量矿石遭20多万人疯抢 ,,2018年01月18日Intel搞定神经拟态芯片:模拟人类大脑、自主学习 ,,2018年01月18日阿里巴巴发布IoTConnect开放连接协议,盼推动语音互动入口普及 ,,2018年01月18日区块链火了,全球大佬们怎么看? ,,2018年01月18日Facebook正测试新功能主推本地新闻资讯 ,,2018年01月18日在GooglePlay中发现使用Kotlin开发的安卓恶意软件 ,,2018年01月18日VisualStudio201715.6预览版本2,增加新功能 ,,2018年01月18日百度陆奇:AI是5G最好的加速器 ,,2018年01月18日PinterestCEO:不同于谷歌和Facebook,我们走了第三条路 ,,2018年01月18日腾讯加码区块链项目已悄然注册“以太锁”商标 ,,2018年01月18日3D打印脑组织?科学家正在向这一目标正在前进 ,,2018年01月18日wince.net2.06升级到2.07【编程语言】2015年01月24日CF148D--Bagofmice+概率期望dp 【编程语言】2015年01月27日C++11的模版类array【编程语言】2015年02月09日Android自定义动画类——实现3D旋转动画 【编程语言】2015年05月11日halcon算子大全 【移动开发】2015年08月28日leetcode:SearchInsertPosition 【综合】2015年01月04日JavaLombok减少代码冗余利刃 【编程语言】2015年07月27日建议大家看下JavaScript重要知识更新2014年01月29日ios开发动物园管理继承多态的实现 【移动开发】2015年07月20日ArcgisEngine栅格数据渲染【架构设计】2015年03月12日Android开发之使用Notification.Builder 【移动开发】2015年05月18日Alex的Hadoop菜鸟教程:第11课Hive的Java调用【编程语言】2015年01月24日通过读取文件头部判断是否为CSV格式文件 【编程语言】2014年12月01日曲速引擎或同时是致命武器 ,,2016年07月24日spingmvc上传文件,poi解析xls,xlsx 【综合】2015年01月09日centos6.5安装mongodb2.6【编程语言】2015年07月07日Android系统架构、JVM和DalvikVM的区别 【互联网】2015年08月28日Jquery的hover方法让鼠标经过li时背景变色2014年01月29日oracle停止数据库后linux完全卸载oracle的详细步骤2014年01月30日Ajax文件管理工具AjaXplorer4.0.2发布,修复安全漏洞 ,,2016年06月23日.net枚举(使用备注) 【编程语言】2015年07月20日一种分布式框架设计(三) 【数据库】2015年03月11日POJ2914MinimumCut最小割图论【编程语言】2014年11月06日033调整数组顺序使奇数位于偶数前面(keepitup) 【移动开发】2014年11月12日(hdustep3.2.1)MaxSum(简单dp:求最大子序列和、起点、终点)【编程语言】2015年02月09日【iOS】字符串转字典 【系统运维】2015年08月14日读书笔记——程序员成长的烦恼(吴亮等)【系统运维】2014年11月26日hibernate基本简单用法 【Web前端】2015年06月17日asp.netXML文件操作实现代码2014年01月29日JavaScript国旗变换效果代码2014年01月29日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)