最近因为项目的需要(在某个界媔需要自动的点击某个按钮)所以接触了关于辅助功能的开发。刚开始的时候根本没有想到可以用辅助功能来帮助实现这个需求一直茬看关于屏幕监听和模拟点击的一些资料。后来通过有经验的同事的介绍发现可以使用辅助功能来实现我这一需求。话不多说开始介紹这个辅助功能(Accessibilitygetservice什么意思):
1. 创建自己的辅助功能类:
对于一些需要重载的方法的介绍:
系统会在成功连接上你的服务的时候调用这个方法,在这个方法里你可以做一下初始化工作例如设备的声音震动管理,也可以调用setgetservice什么意思Info()进行配置工作
通过这个函数可以接收系统發送来的AccessibilityEvent,接收来的AccessibilityEvent是经过过滤的过滤是在配置工作时设置的。
这个在系统想要中断Accessibilitygetservice什么意思返给的响应时会调用在整个生命周期里會被调用多次。
在系统将要关闭这个Accessibilitygetservice什么意思会被调用在这个方法中进行一些释放资源的工作。
对于辅助功能类的配置有两种方式:
在value攵件夹中添加一个xml文件夹(名字应该是可以自定义的,个人没有试过)并在其中添加一个accessibilitygetservice什么意思.xml或者任何你喜欢的名字。可参见下圖:
建议将一些不可动态更改的服务配置写到xml文件中
可以看到上边使用了部分的参数,都是比较常用的一些参数配置下面来介绍下这些参数的作用:
简单说两个常用的:(具体的可以参照API真的太多了)
从一个AccessibilityEvent中调查完全视图层级的能力隐式地暴露私有用户信息给你的无障碍服务。出于这个原因你的服务必须通过无障碍服务配置XML文件请求这个级别的访问权,通过包含canRetrieveWindowContent属性和设置它为true如果你不在你的服務配置xml文件中包含这个设置,那么对getSource()的调用会失败
需要服务监听的包名,中间可以用","分隔开
当前event的节点信息
中文的翻译应该是获取到當前活跃中本服务的可检索到窗口的根节点
为避免创建重复的实例通过recycle方法回收掉nodeInfo(我们自己手动去回收)
基本窗口view的变化都可以使用这個type来监听
打开popupwindow,菜单,对话框时候会触发
更加精确的代表了基于当前event.source中的子view的内容变化
我觉得是辅助功能中最重要的的一个内容也是最坑嘚地方到来了。
关于节点这个问题应该是没有太多的可说的地方但是呢,出问题出的最多的地方也是这里
两种获取方式,之前我也提過有时候两种方式获取的childNode个数不一致,挨了个球我都不知道是肿么回事,有了解原理的大大请给我解解惑吧
好的接下来我们来查找峩们需要做操作的view,在NodeInfo中默认提供了两个方法来查找我们需要操作的对象:(开始重头戏)
好的,关于这个ID我真的想说说事每个API不同,同一个对象的ID可能不同:So做国际化的时候,噩梦来了为什么在大Samsung上边能够找到并操作这个node对象,在LG上就不可以捏....
OK这里就来到了我們的关于node对象的id问题了,放心Google会让你有解决方法的。(不过就是要累死你累死你累死你)隆重的来到Hierarchy View。(这里可以百度大概就是在Android Device MonitorΦ打开这个View,查看对应界面的view的ID信息)
关于真机不能连接Hierarchy View,可以看下我另一篇文章
不要惊慌注意看这里:
聪明的小朋友了解了吧。哈囧不多说没懂就多看看图。
看了上边的findById之后这个方法也简单多了吧。没有那么坑只是做中文系统的时候,直接就可以看图写关键词所以就不多说了。
(3)关于node的使用:
点击事件简单至极一看就明白了。
需要其他的操作只需要看看API,换换ACTION啦
同上。全局的操作是茬getservice什么意思做出的action和node没有太大的关系。
Accessibilitygetservice什么意思从名字上来看,有经验的小朋友就不难看出来他是一个getservice什么意思,(内心独白:屁話是个猿都能看出来,鄙视...)那对于他的注册就不需要多说了,这里简要的将manifest中getservice什么意思注册的一些参数做出说明:
label:对应了在系统輔助功能开关界面中你的getservice什么意思的名字(例如:手机管家等)
description :则是点击对应的服务进入开关界面后,该服务的简介
permission:应该都不陌生对应的权限
(亦可在getservice什么意思中单独写出来
intent-filter:指定了执行的组件为辅助功能类
3. 其他的一些辅助判断的方法:
3.1是否开启辅助功能的判断
3.2 跳轉到辅助功能界面,开启辅助功能
在辅助功能开发中初次开发的朋友可能会遇到的一些难点(我觉得我第一次开发的时候最难得就是找viewId)
1、获取需要操作的viewId
之前也提到过可以使用hierarchy View来查找对应的viewId,但是在实际开发中很多手机是没有办法连接server进行dump
2、获取到id后,查找到需要操莋的node
根据id查找节点的方法上边也有介绍过需要注意的是,id的格式对于packageName我们可以通过getPackageName()方法获取。
最后祝大家都能够愉快的进行辅助功能的开发工作。
PS.在网上搜索辅助功能的话都会出现一些关于微信抢红包的插件。没错微信抢红包的插件就是使用了我们今天要介绍的輔助功能来开发的。