在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);
      }
 
    }
  }

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

AccessibilityService实现微信发红包功能的更多相关文章

  1. Swift - 自定义UIActivity分享

    UIActivity可以十分方便地将文字、图片等内容进行分享,比如分享到微信、微博、发送邮件、短信等等。下面通过继承UIActivity实现定制按钮和功能,通过调用UIActivityViewController来展示分享框。,NSURL]//新建自定义的分享对象数组acts=[WeiXinActivity(),147)!important;font-family:Consolas,UIActivityTypePrintUIActivityTypeAssignToContactUIActivityType

  2. php微信公众平台交互与接口详解

    这篇文章主要为大家详细介绍了php微信公众平台开发,交互与接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. php版微信数据统计接口用法示例

    这篇文章主要介绍了php版微信数据统计接口用法,结合实例形式分析了php微信数据统计接口功能及相关的使用技巧,需要的朋友可以参考下

  4. PHP仿微信发红包领红包效果

    最近项目开发要求实现红包功能,仿微信(不含留言),但只能使用余额发红包。下面小编给大家分享PHP仿微信发红包领红包效果,感兴趣的朋友一起看看吧

  5. 基于Python实现微信自动回复功能

    这篇文章主要为大家详细介绍了Python如何通过WechatPCAPI来实现微信自动回复的功能,文中的示例代码讲解详细,快跟随小编一起动手尝试一下

  6. 解决ios微信页面回退不刷新的问题

    下面小编就为大家带来一篇解决ios微信页面回退不刷新的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. js实现指定红包顺序和金额算法

    这篇文章主要为大家详细介绍了js实现指定红包顺序和金额算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. 微信第三方登录(原生)demo【必看篇】

    下面小编就为大家带来一篇微信第三方登录(原生)demo【必看篇】。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. 微信小程序开发WXML模板语法基础教程

    这篇文章主要介绍了微信小程序模板语法,WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构,需要的朋友们下面随着小编来一起学习学习吧

  10. 微信小程序访问mysql数据库流程详解

    日常我们在开发小程序的时候,总是希望把数据提交回数据库进行存储,那在小程序中该如何访问数据库呢?本篇我们就介绍一下具体的思路

随机推荐

  1. Flutter 网络请求框架封装详解

    这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. Android单选按钮RadioButton的使用详解

    今天小编就为大家分享一篇关于Android单选按钮RadioButton的使用详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

  3. 解决android studio 打包发现generate signed apk 消失不见问题

    这篇文章主要介绍了解决android studio 打包发现generate signed apk 消失不见问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  4. Android 实现自定义圆形listview功能的实例代码

    这篇文章主要介绍了Android 实现自定义圆形listview功能的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解Android studio 动态fragment的用法

    这篇文章主要介绍了Android studio 动态fragment的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. Android用RecyclerView实现图标拖拽排序以及增删管理

    这篇文章主要介绍了Android用RecyclerView实现图标拖拽排序以及增删管理的方法,帮助大家更好的理解和学习使用Android,感兴趣的朋友可以了解下

  7. Android notifyDataSetChanged() 动态更新ListView案例详解

    这篇文章主要介绍了Android notifyDataSetChanged() 动态更新ListView案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  8. Android自定义View实现弹幕效果

    这篇文章主要为大家详细介绍了Android自定义View实现弹幕效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. Android自定义View实现跟随手指移动

    这篇文章主要为大家详细介绍了Android自定义View实现跟随手指移动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Android实现多点触摸操作

    这篇文章主要介绍了Android实现多点触摸操作,实现图片的放大、缩小和旋转等处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部