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

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

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

加小编Python学习群:813542856可以获取各类Python学习资料哦!

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

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

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

STEP1 辅助服务类的使用

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

<pre style=”-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-family: Consolas, Menlo, Courier, monospace; font-size: 16px; white-space: pre-wrap; position: relative; line-height: 1.5; color: rgb(153, 153, 153); margin: 1em 0px; padding: 12px 10px; background: rgb(244, 245, 246); border: 1px solid rgb(232, 232, 232); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;”> <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></pre>

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

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

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

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

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

接下来就是重点了。

首先需要去继承一个AccessibilityService 。

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

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

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

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

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

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

com.tencent.mm.ui.LauncherUI。

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

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

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

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

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

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

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

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

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

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

    原文作者:浪里小白龙q
    原文地址: https://www.jianshu.com/p/5d7dd6367995
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞