原文:http://android.eoe.cn/topic/android_sdkhtml
* 主题*android
Manifest声明和权限api
可访问性服务声明服务器
可访问性服务配置app
AccessibilityService方法ide
得到事件细节ui
示例代码spa
AccessibilityServicexml
AccessibilityServiceInfohtm
AccessibilityEvent
AccessibilityRecord
AccessibilityNodeInfo
Implementing Accessibility
一个可访问性服务,是一个为加强用户界面并帮助残疾用户的应用程序,或者用户可能没法彻底与设备的交互。例如:用户正在开车、照顾一个小孩或者参加一个很是吵闹的聚会,那么用户就有可能须要添加额外的或者可替代的用户反馈方式。
Android提供了标准的可访问性服务,包括反馈,还有开发者可建立和发布他们本身的服务。这个文档解释了创建一个可访问性服务的基础知识。
这种构建和部署可访问性服务的技能被引入Android1.6(API级别4)而且在Android4.0(API等级14)中获得显著的改进。这个Android支持库伴随着Android4.0的发布也更新到能够提供支持之前Android1.6的加强可访问性的特性。开发者的目标是普遍兼容可访问性的服务被鼓励使用在支持库中和在Android4.0介绍更先进的可访问特性的开发。
提供可访问性的应用程序,为了被Android系统看成一个可访问性服务,则必须在他们的应用程序manifests文件中包含特殊的声明。这段解释了所需和可选的可访问性服务。
为了应用程序具备可访问性服务,应用程序必须在其manifest文件中的service单元(而不是service单元中也必须包括一个可访问性服务意图的筛选程序,以下例所示:
<font
color="green">".MyAccessibilityService"
<font
color="green">"@string/accessibility_service_label">
<font
color="green">"android.accessibilityservice.AccessibilityService" />
在Android1.6(APL等级4)或者更高级中部署全部可访问性的服务都须要这些声明。
可访问性服务还必须提供一个,指定可以处理和添加额外信息服务的可访问事件类型的配置。这个可访问性服务的配置包含在AccessibilityServiceInfo类中。在运行的时候,你的服务能够用这个类的接口和setServiceInfo())创建并设置一个配置。然而,用这种方法不是全部的配置选项是有用的。
从Android4.0开始,你能够在你的,这样才容许你设置全部你的可访问性服务选项的完整范围,以下例所示:
".MyAccessibilityService">
...
"android.accessibilityservice"
"@xml/accessibility_service_config" />
meta-data单元引用的一个XML文件,这个文件应该建立在应用程序的resource路径(/res/xml/accessibility_service_config.xml)下面代码
展现的是服务配置文件内容的示例:
可访问性服务配置变量参数,最重要的一个功能是容许你指定你的服务程序能够处理哪一种可访问性事件类型。指定这信息可以使可访问性服务相互合做,而且容许你做为开发人员灵活的处理来自特定应用程序的特定事件类型。这个事件的筛选能够含有下面的条件:
* 包的名称(Package Name)-指定包名称的应用程序,而且是须要你的服务程序处理可访问性事件的应用程序。若是这个变量参数被省略掉了,你的可访问性服务程序,服务任何应用程序的可访问事件都会被认为是可行的。这个变量参数,能够在可访问性服务配置文件里以逗号分隔列表的android:packageNames属性里设置,或者用AccessibilityServiceInfo.packageNames的成员设置。
* 时间类型(Event Types)-须要你的服务程序处理指定的可访问性事件的类型。这个参数能够在可访问性服务配置文件里以逗号分隔列表的android:accessibilityEventTypes属性里设置,或者用AccessibilityServiceInfo.eventTypes的成员设置。
更多关于能够被用在可访问性服务配置文件的XML属性信息,能够根据下面这些连接,参考相关文档。
* android:description
* android:packageNames
* android:accessibilityEventTypes
* android:accessibilityFlags
* android:accessibilityFeedbackType
* android:notificationTimeout
* android:canRetrieveWindowContent
* android:settingsActivity
更多的关于能够在运行时动态地设置配置的设置信息,能够参考AccessibilityServiceInfo文档。
一个提供可访问性服务的应用程序必须继承AccessibilityService类,而且重写这个类的方法。这些方法是按从服务程序开始(onServiceConnected()))的时候这些方法(onAccessibilityEvent()), onInterrupt()))就一直运行到服务关掉(onUnbind()))的Android系统调用的顺序呈现的。
Android系统经过AccessibilityEvent对象把关于用户界面交互的信息提供给可访问性服务。在Android4.0以前,这些有用的信息在可访问性事件中,但另外一方面提供了大量有用的有关用户可选的用户界面控件的详细信息,典型的是提供了有限的上下关联信息。在许多状况下,这些缺失的先后关联的信息,对理解这些可选管理控件的含义有多是很重要的。
在一个界面中,上下关联是相当重要的一个典型的例子是日历或日程计划。若是一个用户选择了周一到周五的“下午4点”时间列表,而且可访问性服务将通知“下午4点”,可是没有明确这是某个月的哪一个周五和周一,很难将理想的信息反馈给用户。在这种状况下,对于想安排一次会议的人,这个用户界面控制的上下关联是相当重要的。
Android4.0显著地拓展了一个可访问性服务能得到有关经过基于视图底层的可访问性服务的用户界面交互的大量信息。视图分层结构可由包含组件(它的父类)的用户界面组件和可被组件(它的子类)包含的用户界面元素组成。用这个方式,Android系统能够提供更多有关容许可访问性服务提供更多有用的反馈给用户的可访问性事件的详细信息。
一个可访问性服务获取有关一个用户接口事件利用AccessibilityEvent事件经过系统向服务器请求返回一个onAccessibilityEvent())回调方法的信息 。这个可访问性服务对象提供了关于事件的详细细节。包括这个类型的对象做用,其描述文本和其余细节。从Android4.0(而且在支持库中支持之前版本的accessibilityeventcompat对象)开始,你能够得到关于事件用这些调用的额外信息:
* AccessibilityEvent.getRecordCount())和getRecord(int))--这些方法容许你检索AccessibilityRecord对象集,这有助于AccessibilityEvent经过系统传递给你,这样才能够提供更多的有关可访问性服务的上下文。
* AccessibilityEvent.getSource())--这方法返回一个AccessibilityNodeInfo对象。这些对象容许你索取来自可访问性事件的父类和子类组件和追查他们的内容和状态以便提供
重点:从AccessibilityEvent调查这个完整视图层次的能力可能曝光你的可访问性服务的私人用户信息。因为这个缘由,你的服务必须请求这种可经过可访问性服务配置XMLservice configuration XML文件的访问级别,包括true。若是在你的服务配置xml文件中不包括此设置,将不能成功调用getSource())。
API演示项目包含两个例子,这两个例子能够做为生成可访问性服务的起点。(/samples//ApiDemos/src/com/example/android/apis/accessibility):* AccessibilityService的实现和能够被用来做为发展基础的可访问性服务的基础,兼容安卓1.6(API级别4)和更高的。* Support Libary) 中等效的支持包类来代替在最新的API级别中介绍的类 (例如,AccessibilityNodeInfo)。用等效的支持包类(例如, AccessibilityNodeInfoCompat)可以使这个示例处理API版本兼容Android1.6(API级别4)。