Android教程进阶:开发无障碍服务

时间:2013-03-19 09:44来源:eoeAndroid 作者:adminjet 点击:

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

创建自己的辅助性服务

:一个辅助性服务可以被捆绑到一个标准的应用程序上,或者以一个单独的安卓工程被创建。在任何情况下,创建这类服务的步骤都是一样的。在你的工程中,创建一个类继续AccessibilitySerivce


像其他服务一样,你也可以在mainfest文件中声明它。记得要指定它处理android.accessibilityservice这个意图。以便当应用程序触发一个AccessibilityEvent时,这个服务能被调用。


如果你为这个服务创建一个新的工程的话,且不打算要一个应用程序,你可以把它启动活动的类(通常叫做MainActivity.java)从你的源文件中删除。同时也把相应的活动元素从你的mainfest文件中删除。

 配置自己的辅助性服务


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

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


从Android 4.0版本开始,有另外一种方法:使用XML文件来配置这类服务。如果你以XML的形式来定义你的服务,某些像canRetrieveWindowContent可配置的选项就可用了。和上面一样的配置,使用XML来定义,格式如下所示:


如果你要使用XML路径,要在你的mainfest文件中指定它,在你的服务声明中添加<meta-data>标签,并指向这个XML资源文件。假如你把你的XML文件存储在res/xml/serviceconfig.xml这个路径下,新的标签格式如下所示:


响应AccessibilityEvents事件


现在,您的服务被设置为运行和监听事件,写一些代码,这样当一个AccessibilityEvent真的到来,它就知道要做什么了! 从重写onAccessibilityEvent(AccessibilityEvent)方法开始。然后使用getEventType()来确定事件类型,然后用getContentDescription来取出任何与触发事件相关的标签文本。


为更多的上下文查询视图层次结构


这一步是可选的,然而它非常有用。Android 4.0(API level 14)的一个新特性:可以用AccessibilityService来查询视图层次结构,收集事件所生成的一些UI组件信息,还有这些UI的父控件和子控件。要做到这一点,确保在你的XML配置文件中做了如下设置:


如果设置了,通过getSource()可获得一个AccessibilityNodeInfo对象。如果发起的窗口事件仍然是活动的窗口,该调用将会返回一个对象,否则,会返回null。下面这段代码演示何时接收一个事件,步骤如下:

立即捕获触发事件的父视图


在那个视图中,寻找一个标签和一个复选框作的子视图。 如果找到,创建一个字符串来向用户报告,以表明这个标签是否被选择了。 如果遍历视图层次结构后返回null,则会退出该方法。


现在你有一个完整的,可以工作的辅助性服务。现在,你也可以试着配置一下,看看Android的text-to-speech engine,或使用Vibrator提供触觉反馈是如何与用户交互。

分享到:

凌阳教育安卓培训【凌阳科技旗下教育品牌】——专业的安卓培训机构,全国唯一“按班公布学员就业去向”的诚信机构

关注我们:

全国免费咨询电话:156-0117-5697 服务监督电话:010-62981113-2800

京ICP备09010168号  京公网安备11010802010586号

北京安卓培训中心:海淀区上地信息产业基地中黎科技园1号楼3层A段

Copyright © 2016 SunplusEdu Inc. All Rights Reserved