Android(安卓)抢红包
最近有要实现微信抢红包的需求,用的AccessibilityService实现,其实网上已经很多这方面的教程,本文纯粹是为了自己记录一下,也是纯粹的学习目的!
实现自动抢红包的原理,是借助Android的辅助服务AccessibilityService,这个服务是Android为部分使用者更方便的与手机交互。该服务的功能很强大,我们就通过抢红包来学习它吧。
第一步在AndroidManifest.xml文件中配置:
<service android:name=".LuckMoneyAccessibilityService" android:enabled="true" android:exported="true" android:label="@string/label" 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/config_luckmoney_service" /> service>
config_luckmoney_service文件是AccessibilityService的配置文件,具体可以看官网:
<?xml version="1.0" encoding="utf-8"?><accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged|typeWindowContentChanged|typeWindowsChanged" android:accessibilityFeedbackType="feedbackGeneric" android:accessibilityFlags="flagDefault" android:canRetrieveWindowContent="true" android:description="@string/accessibility_service_description" android:notificationTimeout="100" android:packageNames="com.tencent.mm,com.tencent.mobileqq" />
下面来看看需要重写的方法:
@Override public void onAccessibilityEvent(AccessibilityEvent event) { //接收事件,如触发了通知栏变化、界面变化等 抢红包的操作都在这里 } @Override protected boolean onKeyEvent(KeyEvent event) { //接收按键事件 return super.onKeyEvent(event); } @Override public void onInterrupt() { //服务中断,如服务被杀死 }
贴出项目代码地址https://github.com/hgchenkai/LuckyMoney ,具体的实现可以看源码。
抢红包大致流程:
1.如果当前页面不是微信消息列表界面,收到通知消息推送通知,判断通知栏里的消息是否有[微信红包]的关键字,有则可以判断为用户收到红包的消息。接着自动化触发这个消息的意图事件(Intent)。
2.第一步正常情况会跳转到com.tencent.mm.ui.LauncherUI界面。红包的消息中包括了关键字”领取红包”,我们就可以根据这个关键字找到相应的View,然后再触发ACTION_CLICK事件,跳转拆红包页面;
3.上一步会跳到
com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI这个拆红包页面,同第二步通过关键字或者view的id,来找相应的View,然后在自动触发ACTION_CLICK事件来拆红包。
这里再简单介绍一下怎么获取view的id。通过DDMS的Dump View Hierarchy For UI Automator可以很容易的得到。(如果是Android Studio DDMS工具是在tools-》Android-》Android Device Monitor):
我的微信版本是6.5.3的,其拆红包的button对应的id是com.tencent.mm:id/be_ 。有了这个id就可以找到相应的View(这里就是这个开红包的button)。然后接着AccessibilityService的辅助功能去自动点击这个button,这样就可以实现抢红包了。这辅助功能真的很强大,多说无益,Read the f**k source code!然后自己创建项目试试吧!
最后Demo的使用,在主界面点击开启抢红包会跳转如下界面:
开启LuckyMoneyAccessibilityService服务就好了。
更多相关文章
- Android(安卓)Activity界面切换添加动画特效
- Android(安卓)拨号器的简单实现
- android用户界面之按钮(Button)教程实例汇
- 锁屏界面
- android用户界面-组件Widget-地图视图MapView
- android用户界面-组件Widget-画廊视图Gallery
- Android(安卓)Activity界面切换添加动画特效
- Android(安卓)View的介绍和使用
- Android(安卓)中文 API (27) —— SeekBar.OnSeekBarChangeListene