您的位置:首页 > 移动开发 > Android开发

Android 源码阅读第一编 AccessibilityServic包下的AccessibilityService 和 AccessibilityServiceInfo<meta-data

2014-10-23 09:51 267 查看
AccessibilityService简介

这个包中的类用于无障碍服务的开发提供替代或增强的反馈给用户、当Accweaaibiltyservice被启动、AccessibiltyService会接受系统的回调并在后台运行、这些事件指的是在用户接口之间的的状态转换、比如、焦点变化、按钮被点击。这样的服务拥有选择请求查询活动窗口的能力。开发一个需要辅助拓展的这个类、并抽象起方法、AccessibiltyServiceIno介绍了Accessibiltyservice。根据这个的封装消息,系统为AccessibiltyserviceEvent发出一个Accessibiltyservice的通知

辅助性服务是安卓框架的一个特性,它的设计是为了让已经安装在安卓设备上的应用程序能够为用户提供一种导航式(引导式)回应。一个辅助性服务能够传达给用户关于这个应用程序的利益,例如把文本转换成语音、当用户手指停留屏幕的一个重要区域时的haptic反馈。这一节涵盖了怎样去创建一个辅助性服务,如何处理应用程序的信息接收,还有如何把信息反馈给用户。

一般用途

开发者可以搭建自己的Accessibiltyservice的服务、这个可以加强可用性、例如声音、物理反馈、和其他的操作模式

Accessibiltyservice可以为应用程序或这一组应用程序提供增强功能

基本用法

1.创建一个AccessibilityService

为了让这个服务能够正常运行必须在清单文件中添加

2.配置自己的辅助服务

为你的辅助性服务设置配置变量,用它来告诉系统,如何和何时你想要它运行。哪一类事件你想要去响应?这个服务对所有的应用程序都是活动的吗?或者只有指定的包名的?它使用什么样的反馈?

你有两种方法去设置这些变量。反向兼容的方法是以代码的形式来设置它们。可以使setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo).如果要这样做的话,要重写onServiceConnected()方法,然后配置在那里配置你的服务。
1.直接代码配置

2.在Android 4.0 以上可以直接在XML中设置或者清单文件中设置

res 下建立 xml文件夹

<?xml version="1.0" encoding="UTF-8"?>

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"

android:accessibilityEventTypes="typeViewClicked|typeViewFocused"

android:accessibilityFeedbackType="feedbackSpoken"

android:notificationTimeout="100"

android:canRetrieveWindowContent="true"

/>

写入这些内容然后再清单文件中引用

<meta-data

android:name="android.accessibilityservice"

android:resource="@xml/accessibility" />

在调用这个getSource()方法时,需要事先配置一下,也就是需要android:canRetrieveWindowContent="true",这个属性是API14(android4.0)给出的,它的配置方法受限于需要采用XML初始化的方式配置AccessibilityService,也就是我们现在不在onServiceConnected()里配置初始化信息,改在xml里实现。那么我们现在就要将上面的程序修改一下。首先,删除onServiceConnected()的配置(因为getSource()不是所有的操作都有该方法,所以得在特定的方法中实现该方法,我们选择在TYPE_VIEW_CLICKED里实现),修改后的服务类如下:

switch (eventType) {

case AccessibilityEvent.TYPE_VIEW_CLICKED:

Log.i(TAG, "==============Start====================");

eventText = "TYPE_VIEW_CLICKED";

AccessibilityNodeInfo noteInfo = event.getSource();

Log.i(TAG, noteInfo.toString());

Log.i(TAG, "=============END=====================");

break;

case AccessibilityEvent.TYPE_VIEW_FOCUSED:

eventText = "TYPE_VIEW_FOCUSED";

break;

现在我们就可以将应用部署到手机上,部署成功后我们点:设置->辅助功能中找到,我们启动这个服务需要系统自动识别
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: