当前位置: 首页 > news >正文

Android 辅助功能 -抢红包

Android 辅助功能 -抢红包

本篇文章主要介绍下通过android辅助功能的方式来实现类似抢红包的功能.

1:权限声明

<uses-permissionandroid:name="android.permission.BIND_ACCESSIBILITY_SERVICE"tools:ignore="ProtectedPermissions" />

2: 配置信息

xml目录下创建如下文件:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"android:accessibilityEventTypes="typeAllMask"android:accessibilityFeedbackType="feedbackAllMask"android:accessibilityFlags="flagDefault"android:canRetrieveWindowContent="true"android:canRequestFilterKeyEvents="true"android:description="@string/desc"android:packageNames= "com.test.redpacket">
</accessibility-service>
  1. android:accessibilityEventTypes 定义服务要监听的事件类型
  2. android:accessibilityFeedbackType 定义了服务的反馈类型
  3. android:accessibilityFlags 定义服务的行为标志
  4. android:description 描述信息 (需要使用资源文件配置)
  5. android:canRetrieveWindowContent 定义了服务是否可以获取窗口内容
  6. android:packageNames定义了监听的包名

3: 自定义AccessibilityService

具体的代码如下:

public class RedPacketAccessibilityService extends AccessibilityService {private static final String TAG = "RedPacketAccessibilityService";@SuppressLint("LongLogTag")@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {int action = event.getAction();Log.i(TAG, "onAccessibilityEvent: " + action);CharSequence packageName = event.getPackageName();Log.i(TAG, "onAccessibilityEvent: " + packageName);AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();if (rootInActiveWindow != null) {List<AccessibilityNodeInfo> nodeInfos = rootInActiveWindow.findAccessibilityNodeInfosByText("红包:恭喜发财");if (nodeInfos != null) {for (AccessibilityNodeInfo nodeInfo : nodeInfos) {nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}}@Overridepublic void onInterrupt() {}
}

此处通过findAccessibilityNodeInfosByText来查找节点了, 我们还可以使用 findAccessibilityNodeInfosByViewId来实现.

4: 服务声明

在manifest.xml中声明服务.

<serviceandroid:name=".RedPacketAccessibilityService"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"><intent-filter><action android:name="android.accessibilityservice.AccessibilityService" /></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/acc" />
</service>

5: 测试代码

public class MainActivity extends AppCompatActivity {private Button btnSend;private TextView tvMsg;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnSend=findViewById(R.id.btn_send);tvMsg=findViewById(R.id.tv_msg);Intent serviceIntent = new Intent(this, RedPacketAccessibilityService.class);startService(serviceIntent);btnSend.setOnClickListener(v -> {tvMsg.setText("红包:恭喜发财");});tvMsg.setOnClickListener(v -> {tvMsg.setText("消息展示");Toast.makeText(MainActivity.this,"抢红包",Toast.LENGTH_SHORT).show();});}
}

相关文章:

  • VUE3生命周期钩子
  • HCIA_IP路由基础问题?
  • SOPHON算能服务器SDK环境配置和相关库安装
  • 【代码】YOLOv8标注信息验证
  • Element UI +Vue页面生成二维码的方法
  • C++_day6:2024/3/18
  • AWS监控,AWS 性能监控工具
  • Apache Doris 2.1 核心特性 Variant 数据类型技术深度解析
  • Linux权限维持后门及应急响应
  • 我的自建博客之旅03之vuepress和Vitepress
  • 基于python智慧社区家政服务系统的设计与实现flask-django-nodejs-php
  • Docker基本配置及使用
  • 关于k8s中 storageclass 的 is-default-sc 默认存储设置
  • 每天学习几道面试题|Kafka(四)内部原理、高级特性以及与其他分布式系统的集成等方面
  • 基于python的4s店客户管理系统
  • [case10]使用RSQL实现端到端的动态查询
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【RocksDB】TransactionDB源码分析
  • conda常用的命令
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java到底能干嘛?
  • MySQL用户中的%到底包不包括localhost?
  • Objective-C 中关联引用的概念
  • react-native 安卓真机环境搭建
  • SOFAMosn配置模型
  • spring boot下thymeleaf全局静态变量配置
  • VUE es6技巧写法(持续更新中~~~)
  • Vue.js-Day01
  • 闭包,sync使用细节
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 记一次用 NodeJs 实现模拟登录的思路
  • 解析 Webpack中import、require、按需加载的执行过程
  • 数据结构java版之冒泡排序及优化
  • 详解NodeJs流之一
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (二)c52学习之旅-简单了解单片机
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • ***测试-HTTP方法
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .net web项目 调用webService
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .project文件
  • @private @protected @public
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——