逢年过节大家都少不了发微信红包,通过微信红包来表达祝福。同时,微信还有拼手气群红包。各种群好友群,亲戚群,工作群逢年过节常常会有红包可抢。抢红包的口诀是:“网速要好,手速要快”。抢到红包固然欣喜,抢不到红包的失落和遗憾的感觉却让人非常不爽。有时等红包等了很久,明明看到了一点开就被抢完。还有人等了很久,刚花了几分钟时间去做其他事,就有人发红包。损失了一个亿啊有木有……自从有了微信红包插件,再也不用担心抢不到红包了。就是单独发给我的红包,我也不用自己点开,可以自动拆红包,一下子就解放了双手。这里就不得不提到Android系统的辅助功能,又叫无障碍功能。
      Google为了让更多的用户可以使用Android系统,也为了可以帮助身体上有障碍的人士,给Android系统开发了辅助功能。辅助功能可以做很多事情,比如读出屏幕上的内容,模拟真实的用户点击等。
      下面我们就来模拟实现一下抢红包功能,这里实现两个应用程序,一个用来模拟微信红包,另一个模拟红包插件。
      先来看一下模拟红包的这个应用。新建一个工程,命名为RedPacket。RedPacket里定义了一个Button,默认文本为“查看红包”。当点击一次会显示未“200元”,再次点击又重新变为“查看红包”。 布局文件activity_main.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.gucheng.redpacket.MainActivity"><Button
     android:layout_height="wrap_content"android:layout_width="wrap_content"android:id= "@+id/hongbao"android:text="查看红包"android:background="#c8ff0000"/>
</RelativeLayout>

在文件MainActivity.java文件中,给按钮添加响应事件。点击一次文本变为“200元”;再点击又变回“查看红包”。这样我们的模拟微信红包的软件就写好了。
      接下来,我们再来写一个应用模拟微信抢红包插件。新建一个工程,命名为AccessibilityClick(辅助点击)。使用Android的辅助功能来实现自动点击操作。这里要用到Android的一个类AccessibilityService。

实现一个类继承自AccessibilityService

public class MyAccessibilityService extends AccessibilityService

在AndroidManifest.xml文件中注册

 <service android:name=".MyAccessibilityService"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" />
</service>

注意上面注册过程中请求了一个权限android:permission=”android.permission.BIND_ACCESSIBILITY_SERVICE”

同时这里有一个accessibilityservice.xml文件,里面有对于该辅助功能的一些配置。该文件是我们自己新建的,放置在xml目录下。如果没有该目录,应新建一个xml目录。这里我们的配置如下:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"android:accessibilityEventTypes="typeAllMask"android:accessibilityFeedbackType="feedbackGeneric"android:accessibilityFlags="flagRequestFilterKeyEvents"android:canRetrieveWindowContent="true"android:canRequestFilterKeyEvents="true"android:description="@string/description"android:packageNames= "com.gucheng.redpacket">
</accessibility-service>

上面的description属性是是对该辅助功能的描述,在设置里看到的就是这个。

 <string name="description">模拟点击</string>

这里加上packageName的属性是为了区分接收哪个应用的消息,如果没有写这个属性的话,默认接收所有应用的消息。

重写onAccessibilityEvent方法
      在实现的MyAccessibilityService类中,我们必须要重写两个方法。一个是onInterrupt,另一个是onAccessibilityEvent。如下图;

package com.gucheng.accessibilityclick;import android.accessibilityservice.AccessibilityService;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;import java.util.List;/*** Created by lenovo on 2017/5/22.*/public class MyAccessibilityService extends AccessibilityService {private static String TAG = "suolong";@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {Log.d(TAG, "event is " + event.getAction());AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();if (nodeInfo != null) {List<AccessibilityNodeInfo> nodeInfos = nodeInfo.findAccessibilityNodeInfosByText("查看红包");if (nodeInfos != null) {for (int i = 0; i < nodeInfos.size(); i++) {nodeInfos.get(i).performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}}@Overridepublic void onInterrupt() {}
}

上图中,显示通过getRootInActiveWindow()获取了根视图,再从根视图中找到含有“查看红包”字样的控件,用performAction(AccessibilityNodeInfo.ACTION_CLICK)来模拟点击事件。
最后实现的效果如下:
      在设置中打开AccessibilityClick的开关后,再进入RedPacket应用,自动就把“红包”拆开了。每次点击“200元”字样后,按钮字样刚变为“查看红包”就会立刻变为“200元”。这个变化的速度非常快以致于看不清楚“查看红包”这几个字。只是一闪而过。


最后,总结一下实现安卓辅助功能需要以下几步:
      a. 实现一个类继承自AccessibilityService
      b. 在AndroidManifest.xml文件中注册
      c. 重写onAccessibilityEvent方法,在该方法中接收应用变化的消息,并进行相应处理。

贴上本文中写的两个模拟的小程序地址:
模拟红包地址:
      https://github.com/gucheng3116/redpacket
模拟抢红包插件地址:
      https://github.com/gucheng3116/redpacket_AccessibilityClick

最后贴上亲测可用的微信抢红包插件源码地址:
      https://github.com/geeeeeeeeek/WeChatLuckyMoney

微信抢红包插件与Android辅助功能相关推荐

  1. android黑科技系列——微信抢红包插件原理解析和开发实现

    一.前言 自从几年前微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导 ...

  2. Android微信抢红包插件原理和实现 适配微信6.6.1版本

    Android微信抢红包插件原理和实现 适配微信6.6.1版本 一.前言 年关将至,小伙伴们又聊起了春节长假的旅行安排和各自家乡的年味习俗,不一而足.其中在各个微信群聊中抢红包也是为大家所津津乐道的. ...

  3. 【安卓学习之微信抢红包】 微信抢红包 5 - 工具Android Monitor

    █ [安卓学习之微信抢红包] 微信抢红包 5 - 工具Android Device Monitor █ 相关文章: - ● [安卓学习之微信抢红包] 微信抢红包 1 - 知识点归纳 ● [安卓学习之微 ...

  4. Android 辅助功能(无障碍)自定义开发类似微信抢红包插件

    背景: 通常在无人值守的Android智能设备或不能触摸交互的设备中,当系统运行异常时, 系统有可能会弹出应用程序无响应(ANR)对话框,提示是否终止当前进程或等待,或应用程序异常退出时系统偶尔也会有 ...

  5. Android 微信抢红包插件

    转载开源工程:https://github.com/geeeeeeeeek/WeChatLuckyMoney 这个Android插件可以帮助你在微信群聊抢红包时战无不胜.当检测到红包时,插件会自动点击 ...

  6. Android微信抢红包插件源码解析

    这个Android插件可以帮助你在微信群聊抢红包时战无不胜.当检测到红包时,插件会自动点击屏幕,人工点击的速度无法比拟. 你正在查看的是dev分支,这个分支包含大量实验性的修改,不再更新.如果你希望有 ...

  7. 微信抢红包插件 android 8.0,重磅!微信8.0专属红包全量上线!

    "本文由我原创,来源 

  8. 【安卓学习之微信抢红包】 微信抢红包 1 - 知识点归纳

    █ [安卓学习之微信抢红包] 微信抢红包 1 - 知识点归纳 █ 相关文章: ● [安卓学习之微信抢红包] 微信抢红包 1 - 知识点归纳 ● [安卓学习之微信抢红包] 微信抢红包 2 - 通知服务( ...

  9. APP逆向分析之钉钉抢红包插件的实现-iOS篇

    花费了很多天的原创文章,转载请注明出处https://yohunl.com/ding-ding-qiang-hong-bao-cha-jian-iospian/ ,谢谢! 网络上关于微信红包的分析文章 ...

  10. android微信的抢红包插件

    前言   之前看到了微信抢红包的插件,觉得这个功能实在强大了,这和之前我想实现的模拟点击事件基本相似,可以完美的触发一个view的点击事件,当然静默安装的原理也和抢红包的原理是一样的.   小米有开源 ...

最新文章

  1. 图的顺序存储结构及C语言实现
  2. 无法解析的外部符号 __imp__timeGetTime@0
  3. 2021-03-30 严反馈系统
  4. sharepoint_wf 启动窗口设计,支配给自由域用户
  5. 使用Eclipse进行远程调试 外加 ant 直接打包到服务器
  6. 在VB6.0中怎么实现escape和unescape
  7. Time flies
  8. Windows 7软件及游戏的兼容性
  9. 四十一 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...
  10. 计算机组成原理之常用的门电路
  11. BS架构和CS架构的优缺点
  12. 手把手教你搭建自己的微信公众号
  13. 一种简单的zabbix客户端 主机hostid查看方法
  14. 男子虚构身份骗同窗网敌百余万
  15. jsp图书报刊订阅系统java_servlet
  16. 成为技术传播者(二):Why and Why NOT
  17. 云南省计算机云教室,“云教室”落户云南祥云这个小山村
  18. Power and Modulo(思维)
  19. AcWing蓝桥杯AB组辅导课08、数论
  20. TMS28027输出PWM波例程解析

热门文章

  1. 豆瓣TOP250爬虫,数据分析项目实战——pyecharts
  2. spnc币吧_CCIEC币-目前是CPUsolo独自开采。CPU服务器独自开采钱包上挖新币教程!...
  3. Mentor Expedition(EE)如何给我们的PCB铺铜?
  4. Java逐帧动画播放器V0.1.0
  5. RBF神经网络和拟合实例
  6. 简明的wifi通信协议介绍
  7. 如何软件项目电子投标
  8. Maven仓库管理器-Nexus
  9. SuperMap iDesktop入门实战-张杰-专题视频课程
  10. 计算机辅助翻译 教学大纲,《计算机辅助翻译》本科课程教学大纲翻译本科.doc...