有了这个再也不担心任何微信红包,Python就是好用~

党薇 2018-03-09

为了应对领导在群里时不时的一个红包,写一个抢红包的应用迫在眉睫了。之前由于没有自动抢红包错失了100RMB+的红包啊!

先来整理下思路。要实现抢红包,那么就要在红包来的时候去打开微信,执行点击的动作。被点击的控件肯定是带有红包关键字的。打开红包后,还需要去点击一下打开。

为了实现上面的一系列步骤,方法有两种。

  1. 从framwork进行修改。这种方式适合于自制rom。如手机厂商多采用这种方法。有个同事就通过这方法实现了红包功能。

  2. 就只能通过google 提供了一个辅助服务类了。该类可以监听通知、监听窗口变化,模拟点击等功能。该文就采用辅助服务类。

STEP1 辅助服务类的使用

通过配置manifest文件就可以使用辅助服务了。

<service android:name=".RedService"
 android:enabled="true"
 android:exported="true"
 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/red_service_config" />
 </service>

该服务可以进行配置,配置如下:

有了这个再也不担心任何微信红包,Python就是好用~

配置好后,该服务就可以使用了。可以通过一个按钮引导用户去开启这个服务

有了这个再也不担心任何微信红包,Python就是好用~

因为这个服务在系统设置里,所以通过点击去打开系统设置。然后就可以开启次服务。

接下来就是重点了。

首先需要去继承一个AccessibilityService 。

有了这个再也不担心任何微信红包,Python就是好用~

需要去重写他的两个方法。onAccessibilityEvent方法用来接收服务监听的事件,此处为通知和窗口变化。

现在先来看看 通知来的时候如何处理:

有了这个再也不担心任何微信红包,Python就是好用~

有了这个再也不担心任何微信红包,Python就是好用~

在打开微信后,会发生窗口状态变化。这个时候该事件将会被监听。

此处要说的是微信的聊天界面和聊天列表的界面其实是在一个activity。都为

com.tencent.mm.ui.LauncherUI。

而且聊天界面是整个Activity contentView的父VIEW。通过解析页面可以轻易的发现。

再新打开的页面上,通过辅助类提供的方法对节点进行遍历。

有了这个再也不担心任何微信红包,Python就是好用~

通过 AccessibilityNodeInfo nodeInfo = getRootInActiveWindow(); 获取跟节点,同时也可以通过getchirld 方法来看看他的子节点。

在android.widget.FrameLayout下一共有8个子Node,不一一列举。上面列举了一个叫com.tencent.mm.ui.mogic.WxViewPager的view这个view 就是我们的聊天列表。

其余7个分别是搜索、更多、微信、通信录等。

 当我们在聊天页面点击红包后,会弹出一个为打开的红包或者可能提示红包已到期。重点说说正常情况下红弹出红包的情况。弹出红包将会触发一个event,该event为窗口变化,由之前的窗口变为了com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI。

这时候,我们可以继续利用对节点的遍历来实现点击的动作。代码如下:

有了这个再也不担心任何微信红包,Python就是好用~

至此,基本自动抢红包的功能都完成了。为了保证程序的健壮性,还需要对抢红包的失败的情况进行处理。

相关推荐