AccessibilityService实现微信发红包功能

在AccessibilityService中我们可以做模拟操作,下面记述下通过AccessibilityService实现微信发红包的功能

1.配置AccessibilityService,需要通过集成AccessibilityService来执行操作。

public class TestAccessibilityService extends AccessibilityService {
  @Override
  public void onAccessibilityEvent(AccessibilityEvent event) {
    ...
  }

  @Override
  public void onInterrupt() {
    VirtualControlManager.getInstance().onCancel();
  }
}

使用时,需要在AndroidManifest.xml进行配置

<service android:name=".TestAccessibilityService"
   android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
   android:label="@string/accessibility_service_label">
  <intent-filter>
      <action android:name="android.accessibilityservice.AccessibilityService" />
  </intent-filter>

   <meta-data
      android:name="android.accessibilityservice"
      android:resource="@xml/accessibility_service_config" />

</service>

在res文件夹下创建xml文件夹,存放accessibility_service_config.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="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"
  android:canRetrieveWindowContent="true"
  android:description="@string/accessibility_service_description"
  android:notificationTimeout="100"/>
  <!--accessibilityEventTypes:表示该服务对界面中的哪些变化感兴趣,即哪些事件通知,比如窗口打开,滑动,
  焦点变化,长按等.具体的值可以在AccessibilityEvent类中查到,如typeAllMask表示接受所有的事件通知.-->
  <!--accessibilityFeedbackType:表示反馈方式,比如是语音播放,还是震动-->
  <!--canRetrieveWindowContent:表示该服务能否访问活动窗口中的内容.也就是如果你希望在服务中获取窗体内容的化,则需要设置其值为true.-->
  <!--notificationTimeout:接受事件的时间间隔,通常将其设置为100即可.-->
  <!--packageNames:表示对该服务是用来监听哪个包的产生的事件-->

这句话非常重要,后面会用到,切记

android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"

2.启动微信

Intent intent = new Intent(Intent.ACTION_MAIN);
//  intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent
//  .FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);

        //加这个flag为了让微信能够进入的时候在会话列表
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        ComponentName cn = new ComponentName(“com.tencent.mm”, “com.tencent.mm.ui.LauncherUI”);
        intent.setComponent(cn);
        context.startActivity(intent);

网上很多启动微信的代码在setFlags中的参数都是我注释的那段,用那段确实可以启动微信,但是不能保证微信启动后就是最原始的消息列表,而是微信任何界面(用户上次操作微信停留的界面),这样在想做模拟点击的操作,要加好多的判断界面的代码和操作,那么能否我启动微信时一定在消息列表呢,答案是可以的,那就是用下面这个flag,在启动微信的时候肯定会到消息列表,省去了我们的操作。

Intent.FLAG_ACTIVITY_CLEAR_TOP

3.执行操作

通过AccessibilityService的onAccessibilityEvent(...)方法,我们可以获取到界面view的信息,用getRootInActiveWindow(),一步步通过view的id,来模拟操作,到发红包界面。

这里需要注意,微信在跳转到红包界面的时候是有一个dialog加载动画的,不少人在跳转到发红包界面时,通过getRootInActiveWindow()获取到的对象不是null就是节点信息不对,这是因为一个dialog快速加载过去了,部分机器能看一闪的效果,如果手机性能比较好,这个dialog可能就看不到,但是代码执行的时候就拿不到节点信息。

尝试过加延时,但是延时过后,onAccessibilityEvent方法不执行,还是等于没有。

这时候就需要用到开篇讲的了这段代码了:

android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"

加上这段代码后,我们就能通过onAccessibilityEvent来获取到发红包界面的view了,发一段在发红包界面填写金额的代码:

private void sendLuckMoney() {
    AccessibilityNodeInfo rootInfo = accessibilityService.getRootInActiveWindow();
    if (rootInfo != null) {
      List<AccessibilityNodeInfo> nodeInfoList = rootInfo.findAccessibilityNodeInfosByViewId("com.tencent.mm:id/clu");
      for (AccessibilityNodeInfo nodeInfo : nodeInfoList) {
        Bundle arguments = new Bundle();
        arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "10");
        nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
      }

    }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android AccessibilityService实现微信抢红包插件

    在你的手机更多设置或者高级设置中,我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的,其实这个功能是为了增强用户界面以帮助残障人士,或者可能暂时无法与设备充分交互的人们 它的具体实现是通过AccessibilityService服务运行在后台中,通过AccessibilityEvent接收指定事件的回调.这样的事件表示用户在界面中的一些状态转换,例如:焦点改变了,一个按钮被点击,等等.这样的服务可以选择请求活动窗口的内容的能力.简单的说AccessibilityService就是一个后

  • Android辅助功能AccessibilityService与抢红包辅助

    推荐阅读:Android中微信抢红包插件原理解析及开发思路 抢红包的原理都差不多,一般是用Android的辅助功能(AccessibilityService类)先监听通知栏事件或窗口变化事件来查找红包关键字然后去模拟点击或打开红包. 下面附上源码,程序已实现自动抢红包,锁屏黑屏状态自动解锁亮屏,Android4.X测试通过.函数具体功能请看详细注释. 注:在聊天界面收到红包不会自动打开,因为通知栏没有消息提示从而监听不了,此时只需手动点一下即可.其他未知情况请自行用LogCat调试,源码已经有相

  • AccessibilityService实现微信发红包功能

    在AccessibilityService中我们可以做模拟操作,下面记述下通过AccessibilityService实现微信发红包的功能 1.配置AccessibilityService,需要通过集成AccessibilityService来执行操作. public class TestAccessibilityService extends AccessibilityService { @Override public void onAccessibilityEvent(Accessibil

  • php实现微信发红包功能

    本文实例为大家分享了php实现微信发红包功能的具体代码,供大家参考,具体内容如下 微信商家后台-现金红包开发: <?php class wxPay { //配置参数信息 const SHANGHUHAO = "1430998xxx";//商户号 const PARTNERKEY = "leFyTOXWzUEXxfp47WOu5d9xxxxxx"; //api,商户后台 //核心支付函数,参数:请求地址和参数 function pay($url,$obj) {

  • php版微信发红包接口用法示例

    本文实例讲述了php版微信发红包接口用法.分享给大家供大家参考,具体如下: 微信红包功能我相信各位朋友都知道吧,但如果我们要把红包集成到网站那么要如何来做呢?这里小编就来为各位分享一个php 微信发红包接口测试实例,希望文章能够帮助到各位朋友 下面是一个类,使用方法: $arr['openid']='ojgTTt8oF9VdYcGsJMACHpA-jy1U'; $arr['hbname']="提现申请"; $arr['body']="您的提现申请已经成功"; $ar

  • Java多线程实现简易微信发红包的方法实例

    一. 首先我们先大致了解一下什么是多线程.(书上的解释) 程序是一段静态的代码,它是应用软件的蓝本.进程是程序的一次动态执行过程,对应了从代码加载执行,执行到执行完毕的一个完整的过程. 线程不是进程,线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程形成多条执行线索,每条线索即每个线程也有它自身的产生,存在,消亡的过程,和进程共享操作系统的资源类似,线程间也可以共享进程中的某些内存单元,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作,但与进程不同的是线程的中断和恢复

  • PHP实现微信发红包程序

    使用PHP发红包,当我们输入红包数量和总金额后,PHP会根据这两个值进行随机分配每个金额,保证每个人都能领取到一个红包,每个红包金额不等,就是要求红包金额要有差异,所有红包金额总额应该等于总金额. 查看演示                        下载源码 首先给大家分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第二个红包=10-第一个红包金额:

  • 微信小程序实现发红包功能

    本文实例为大家分享了微信小程序实现发红包的具体代码,供大家参考,具体内容如下 目前此功能尚在内测,无法申请.此博文仅示例. 流程效果图: 图片1触发wx.sendBizRedPacket({})吊起图片2,点击开,出现图片3,关闭以后出现图片4. wx.sendBizRedPacket({})说明及示例: wx.sendBizRedPacket({ timeStamp: e.timeStamp, nonceStr: e.nonceStr, package: e.package, signType

  • php实现微信公众平台发红包功能

    本文实例为大家分享了php微信公众平台给用户发红包的具体代码,供大家参考,具体内容如下 直接上代码: 代码 <?php /** * 微信红包的类 * @Author snmoney#gmail.com * @copyright 2015 * @version 2.0 * *微信红包还有部分可选的参数,如分享预设值等将在后续版本补充上相关功能. * 对应官方接口更新,追加了分裂红包的玩法,详情参考官方文档. */ CLASS WXHongBao { private $mch_id = "**

  • PHP仿微信发红包领红包效果

    近期项目需要在聊天的基础上新增红包功能,需求:仿微信(不含留言),但只能使用余额发红包.于是多次使用微信红包,了解各种交互界面及业务需求,如展示信息.分类(个人,群普通,群拼手气).个数限制(100).金额限制(200).过期时间(24小时)等等,然后着手开发,下面提及的基本全是提供给app端的接口,毕竟我是phper. 一.设计数据表如下 CREATE TABLE `red_packet` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `us

  • Java实现微信发红包

    前言 红包文化源远流长.从古时的红色纸包,到手机App中的手气红包,红包作为一种独特的中华文化传承至今.之前的所有内容中,综合Java这方面的知识,可以模拟发普通红包.那么这篇博客,我将整合之前介绍的所有的技术和知识,编写一个带界面版的 发红包 案例. 需求分析 分析并使用已给出的类,编写程序,设置红包类型. 小贴士 红包类型: 1.普通红包:金额均分.不能整除的,余额添加到最后一份红包中. 2.手气红包:金额随机.各个红包金额累和与总金额相等. 红包场景: 此案例是模拟群主给群成员发红包,群主

  • Java基于ArrayList实现群主发红包功能

    群主发普通红包,某群有多名成员,群主给成员发普通红包,普通红包的规则: 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取: 成员领取红包后,保存到成员余额中. 请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作. 根据题目可以稍作分析,群主和普通群成员都隶属于用户类,那么久可以建立一个用户类,用户类的属性可以有用户名,金额或者钱包,如下: package day05_after03; /** * 定义成员类 * * @author liuwenlong *

随机推荐