赞
踩
最近好久没写博客了,特别是Android系统启动这一个系列,虽然过程已经理了很多遍了,但是由于实习期间是在抽不出时间,没办法输出文章。最近接触了Android辅助服务,即AccessibilityService的相关内容,也算是解决了我一直一来的困惑——微信抢红包插件是怎么实现的。这两天,抽空总结一下这一部分相关的内容,上篇介绍使用,下篇分析原理。
下面两个链接是Google官方对于辅助服务的介绍:
辅助服务使用官方介绍
辅助服务类官方api文档
辅助服务的设计初衷提供给无法和界面进行交互的残疾用户。来协助帮助他们进行一些用户操作,比如点击,返回,长按,获取屏幕信息等能力。后来被开发者另辟蹊径,用于一些插件开发,做一些监听第三方应用的插件。
下面是辅助服务的继承关系:
辅助服务的生命周期由系统专门管理,并遵循Server的生命周期。服务的启动只能用户在设备设置中明确启动服务来触发。当系统绑定到服务后,它会调用AccessibilityService#onServiceConnected()方法。当用户在设置设置中关闭时,辅助服务功能将停止,或者调用AccessibilityService#disableSelf()方法。giant服务会被关闭销毁
设备设置无障碍选择:
下面是关于AccessibilityService的使用
要使用辅助服务,首先先继承AccessbilityService类,并且重写其方法。
public class StatusAccessibilityService extends AccessibilityService { /** * 发生用户界面事件回调此事件 * @param event */ @Override public void onAccessibilityEvent(AccessibilityEvent event) { } /** * 中断可访问性反馈 */ @Override public void onInterrupt() { } }
除了上面的两个必须要重写的方法外,AccessbilityService还提供了下面的一些方法:
不太常用的:
AccessbilityService是一个服务,所以同样,他也要在AndroidManifest中注册:
<service
android:name="com.hahak.walle.accessibilitydame.StatusAccessibilityService"
android:label="辅助服务测试"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
</service>
接下来,就是配置服务参数,即设定AccessbilityService所能干的事。
配置方法有两种,一种是在代码中动态设置,一种是写配置文件。
方法1.写配置文件
首先在AndroidManifest中生命配置文件的位置
<service
android:name="com.hahack.walle.AutoCheckStatusAccessibilityService"
android:label="运营助手:自动艾特用户"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/allocation"/>
</service>
其次,在@xml/allocation文件中,声明下面的内容
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:description="demo"
android:accessibilityFeedbackType="feedbackSpoken"
android:canRetrieveWindowContent="true"
android:notificationTimeout="1000"/>
方法2:.在代码中动态添加
在自定义的AccessibilityService类中,可以通过在AccessibilityServiceInfo类重写onServiceConnected(),并通过 this.setServiceInfo来添加配置
@Override
public void onServiceConnected() {
info.eventTypes = AccessibilityEvent.TYPE_VIEW_CLICKED |
AccessibilityEvent.TYPE_VIEW_FOCUSED;
info.packageNames = new String[]
{
"com.example.android.myFirstApp", "com.example.android.mySecondApp"};
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN
info
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。