最近有要实现微信抢红包的需求,用的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服务就好了。
  

更多相关文章

  1. Android(安卓)Activity界面切换添加动画特效
  2. Android(安卓)拨号器的简单实现
  3. android用户界面之按钮(Button)教程实例汇
  4. 锁屏界面
  5. android用户界面-组件Widget-地图视图MapView
  6. android用户界面-组件Widget-画廊视图Gallery
  7. Android(安卓)Activity界面切换添加动画特效
  8. Android(安卓)View的介绍和使用
  9. Android(安卓)中文 API (27) —— SeekBar.OnSeekBarChangeListene

随机推荐

  1. android Animation 基础解答
  2. Android中添加Options Menu,按MENU键无反
  3. Android多点触摸交互处理
  4. android 开始启航
  5. (转)认识Android手机--来自MIUI
  6. linux下编译windows版android sdk
  7. android studio引用java8后编译报错解决
  8. Android轮播图(ViewPage)
  9. 第一课:android平台搭建、以及helloworld
  10. Android——EditText自定义边框、圆角和