一、 先来说说什么是AccessibilityService:
AccessibilityService是一个辅助类,可以监听我们手机的焦点,窗口变化,按钮点击等等。实现它的服务需要在手机设置里面->辅助功能在这里面找到你自己实现的辅助类,然后打开它就可以进行我们一系列的监听了。
开发者可以搭建自己的Accessibility服务,例如要实现自动点击按钮,模拟用户操作。当我们要实现静默安装时,又获取不到root权限,这时就可以用AccessibilityService来自动点击安装程序过程。还有可以实现自动抢红包程序什么的,还是比较好玩的。
这里附上官方文档上的AccessibilityService简介。
二、继承AccessibilityService所要覆盖的几个重要方法:
onServiceConnected() - 可选。系统会在成功连接上你的服务的时候调用这个方法,在这个方法里你可以做一下初始化工作,例如设备的声音震动管理,也可以调用setServiceInfo()进行配置工作。
onAccessibilityEvent() - 必须。通过这个函数可以接收系统发送来的AccessibilityEvent,接收来的AccessibilityEvent是经过过滤的,过滤是在配置工作时设置的。
我们把每一个被监听的Activity分开处理,这样方便对每个页面进行操作。
在寻找要操作的控件时,要以树的深度去遍历每个层级的目标控件,否则很难找到目标控件,此时我们就有必要写个递归函数遍历整个Activity上的所有View.
onInterrupt() - 必须。这个在系统想要中断AccessibilityService返给的响应时会调用。在整个生命周期里会被调用多次。
onUnbind() - 可选。在系统将要关闭这个AccessibilityService会被调用。在这个方法中进行一些释放资源的工作。
三、下面就来介绍下AccessibilityService的使用的步骤:
(1)新建一个类继承AccessibilityService,并在AndroidManifest文件里注册它:
<service android:name="com.xqf.aroundpeople.service.AutoClickService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:label="@string/service_name"
>
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"
/>
intent-filter>
<meta-data
android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice_config"
/>
service>
在manifest文件下添加继承了AccessibilityService的子类AutoClickService,同时加入相应的权限android.permission.BIND_ACCESSIBILITY_SERVICE。
onServiceConnected
在这个回调函数里面可以配置我们当前的Service的信息,可以看我上面的代码都写得很清楚。但是记得也可以在我们的xml里面配置我们的Service的信息,这里我也是在xml里面配置的信息。在我们的res文件夹下面新建一个文件夹xml然后在里面新建一个xml文件accessibilityservice_config.xml。
<accessibility-service xmlns:android = "http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:canRetrieveWindowContent="true"
android:description="@string/service_name"
android:packageNames="com.tencent.mobileqq"
android:notificationTimeout="100"
/>
这里需要提醒的是配置的时候packageNames这个就是你要监听的包名,这里我们需要监听的是安装的信息,可以有多个用逗号隔开,accessibilityEventTypes这个是监听的事件。
配置完后,就可以接收要监听的事件了,下面就是我们要重点操作的方法:
onAccessibilityEvent
这里面最重要的部分就是onAccessibilityEvent这个回调函数,当我们注册了监听事件的时候,当有事件发生就会通知我们这个函数,但是一定要注意这个函数通知是异步的,当然很多朋友就会问这个是怎么通知到这里来的呢?他是通过AccessibilityDelegate这个代理类,发送出来的,这个类有个方法sendAccessibilityEvent可以发送事件。那这个类又怎么和我们的窗口联系呢?这里举个例子。比如我们的View类里面有个setAccessibilityDelegate这个方法,是不是这下一切都明了了呢?然后就是调用我们的find函数去当前节点里面找到我们需要的节点信息,通过模拟点击事件来安装我们的软件,当然如果是输入框也是可以模拟输入的哦。
下面我就给个我的写的项目工程AroundPeople.zip的传送门https://yunpan.cn/cPg7RKhRYnmUU 访问密码 d63c
更多技术干货,欢迎到我的个人博客http://littlerich.top/2016/12/05/Android%E8%87%AA%E5%8A%A8%E5%8C%96%E6%A8%A1%E6%8B%9F%E6%93%8D%E4%BD%9C%E5%BC%80%E6%BA%90%E5%BA%93/
获取开源项目GitHub:http://github.com/littleRich/