由于部分安卓用户在身体的问题致使他们不能看完整的屏幕或者使用触屏,google提供了Accessibility功能和服务帮助这些用户更加简单地操作设备。这其中最主要的一个类就是AccessibilityService,AccessibilityService是一个系统服务,它运行在后台,并且能够收到由系统发出的一些事件,比如通知状态、按钮被点击了等等。界面中产生的任何变化都会由系统通知给AccessibilityService.这就像监视器监视着界面的一举一动。
AccessibilityService生命周期
AccessibilityService继承了service,他是在后台运行的。
1、AccessibilityService是系统服务,该服务完全由系统管理,并遵循已有的服务周期.
2、开启一个服务只能由用户在设置中打开,而关闭则只能由用户在设置中关闭或者服务本身通过diableSelf()方法关闭
3、系统绑定该服务之后,会调用onServiceConnected()方法,这个方法可以被重写,在这里可以做一些初始化的操作.
4、在实际的操作实验中发现,即便手动开启该服务,在6.0以上的系统经过一段时间也会自动关闭。
在实际开发中,可以继承AccessibilityService类,然后有选择的实现其中的一部分函数,就可以实现一些特殊的功能。
AccessibilityService函数
1.onAccessibilityEvent(AccessibilityEvent event
)必须重写。AccessibilityEvent是一个事件类,里面封装了许多字段,表示各种不同的事件(通知、窗口内容)。形参event表示事件变化,接收来的AccessibilityEvent是可以经过过滤的,过滤是在配置工作时设置的。
2.onInterrupt()必须重写。这个在系统想要中断AccessibilityService返给的响应时会调用。在整个生命周期里会被调用多次。
3.onServiceConnected()可选。在系统成功连接上这个AccessibilityService会调用。在这个方法里主要做初始化工作。
4.onUnbind()可选。在系统将要关闭这个AccessibilityService会被调用。在这个方法中主要做释放资源的工作。
声明
AccessibilityService和在menifest中声明其他service一样,但要额外做两件事
1.配置,其name为固定的
2.声明BIND_ACCESSIBILITY_SERVICE权限,
配置
AccessibilityService可以添加一些配置信息,目的是只接收一些特定的事件.例如:监听特定的包、android给我们提供2种配置方法:
方法1:meta-data标签方式:
在manifest声明的servce中提供一个meta-data标签,然后通过android:resource指定相应的配置文件(在res目录下创建xml文件,并在其中创建配置文件accessibilityservice.xml)