| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> AccessibilityService的使用 -> 正文阅读 |
|
[移动开发]AccessibilityService的使用 |
一:什么是AccessibilityService? ? ? ?AccessibilityService是Google为了方便那些身体不便的用户来使用Android设备而提供的一种无障碍服务,该服务可以帮助那些身体不便的用户更加简单的使用和操作Android设备 ? ? ? ?AccessibilityService运行在后台,并且能够收到由系统发出的一些事件(AccessibilityEvent,这些事件表示用户界面一系列的状态变化),比如焦点改变,输入内容变化,按钮被点击了等等,该种服务能够请求获取当前活动窗口并查找其中的内容.换言之,界面中产生的任何变化都会产生一个时间,并由系统通知给AccessibilityService.这就像监视器监视着界面的一举一动,一旦界面发生变化,立刻发出警报. 流程图: ? ? ? ?根据以上流程图我们基本上是理清了AccessibilityService的操作流程,主要就是目标APP进程发送消息给系统进程,在系统进程接收到消息后再把消息发送给相关的目标AccessibilityService,主要流程就是这些。 ? ??? AccessibilityService是Service的子类,但是它的声明周期是由系统来管理的,那也就是说我们要想启动该服务就不能够像平时那样直接startService()了而是需要在Android设备的辅助功能列表中手动开启该服务,当开启该服务后其生命周期就交由系统来管理和维护了。需要注意的是虽然不需要通过startService()等方式来启动AccessibilityService服务,但是AccessibilityService依然是需要在配置文件AndroidManifest.xml中配置。由于AccessibilityService是抽象类不能直接使用,所以需要先自定义一个类来继承AccessibilityService 二:具体的使用? ? 1:继承系统AccessibilityService
onAccessibilityEvent()方法:表示该服务接收系统传递进来的辅助事件(该事件可能是当前窗口内容发生变化触发的,也可能是当前窗口焦点发生变化触发的,还有可能是系统弹出Notification触发的等等),该方法为事件入口,每当监听的指定应用触发了指定事件的时候都会回调此方法 事件类型:
2:?在AndroidMainifest中注册
注意以下几点:
? ? ? ? ImjCheckService添加label标签,标签表示服务的名字,应用安装后会在手机辅助功能的列表中显示,若没定义标签则不显示
? ? ? ? 系统权限android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"是一定要添加的,否则该服务会被系统忽略
? ? ? ? 一定要添加intent为的android:name="android.accessibilityservice.AccessibilityService"过滤器,否则该服务会被系统忽略
? ? ? ? meta-data中android:name表示配置的服务名称,值是固定写法不能修改,android:resource表示引用的具体配置文件,本例引用的是imgaccessibility.xml文件【注意:此配置是在4.0版本之后的写法,在低版本中可使用另一种写法,这里就不讲解了】 ?看完了manifest配置文件后,我们看一下在res目录下的xml文件夹中的imgaccessibility.xml文件,代码如下:
三:uiautomatorviewer工具的使用?好了,配置完了我们的AccessibilityService服务后,接下来就是要具体实现咋们所谓的自动点击的功能,先看下图片,我们要实现的功能是开发一个自动打开桌面的i闽警这个app,然后进入到主页,但是主页加载的可能是消息页面,也可能已经是i民警这个页面。看这些功能主要就是要实现自动点击,那要怎么点击呢。 ? ? ? ? ? onAccessibilityEvent()方法,我们可以在该方法中来模拟用户的操作,要模拟点击操作就要得到对应的按钮,然后执行按钮的点击事件;那怎么样才能得到目标按钮这个对象呢?在AccessibilityService中提供了一个getRootInActiveWindow()方法,该方法返回一个代表当前活动窗口的根节点AccessibilityNodeInfo实例对象,该对象保存了当前窗口界面的相关信息,比如控件在窗口的位置信息,id信息,文本信息,类型信息,文本信息等等,它和ViewGroup类似,对外提供了诸如 findAccessibilityNodeInfosByViewId(),findAccessibilityNodeInfosByText(),performAction()等方法。其中findAccessibilityNodeInfosByViewId()是4.3版本之后的新增方法,表示根据给定控件的ID来获取到对应控件,获取到对应控件后就可以通过performAction()方法来执行点击事件了,那怎么获取到指定控件的ID呢? ? ? ? ? 在Android的sdk目录中有个tools目录,在该目录下有个uiautomatorviewer工具,该工具很有用,特别是分析apk的页面布局信息,它可以获取到当前手机屏幕上的界面信息,路径如下: ? ?点击中间两项进行截屏,发现有的手机会报上面的错误,有的手机能正常截取到屏幕,如果不能正常截取,我们可以用cmd命令来获取,但是为了不要繁琐的进行命令敲入,我们把截图命令设置成bat文件,就是把txt文档后缀改成bat,直接在点击bat文件就可以截图了:
?截图后uiautomatorviewer工具点开第一个按钮,引入截图的png和对应的uix文件,点击ok把界面加载进uiautomatorviewer工具 ?点击界面上的控件,在右侧可见到对应的控件信息,可看的到界面布局 ? ?接下来具体的代码咋们工程里看。 参考的文章: AccessibilityService,打造自己的APP小外挂(上)https://blog.csdn.net/llew2011/article/details/52822148 AccessibilityService源码分析 https://blog.csdn.net/llew2011/article/details/52843637 自动抢红包?https://blog.csdn.net/tinson12321/article/details/89150921 ?辅助服务监听系统按键(AccessibilityService最简实例) https://blog.csdn.net/twk121109281/article/details/100766558 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/28 12:03:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |