首页 » Android程序设计:第2版 » Android程序设计:第2版全文在线阅读

《Android程序设计:第2版》可访问性

关灯直达底部

从Android 1.6(API level 4)开始,提供了可访问性API,其设计目标是为了扩大Android应用的使用范围,使盲人和视力低下的人都可以使用。可访问性API的核心是AccessibilityService,它是运行在后台的抽象类。

AccessibilityService的这种运行方式意味着你可以继承它,它是一个服务,必须在manifest文件中声明。不但要做出声明,而且这种类型的服务还包含其必须处理的特定的intent(android.accessibilityservice.AccessibilityService):


<service android:name=".Accessibility">      <intent-filter>            <action android:name="android.accessibilityservice.AccessibilityService" />      </intent-filter></service>  

创建AccessibilityService类时,必须声明反馈及事件类型。可以通过生成AccessibilityServiceInfo对象实现这一点,设置各种变量,然后传递给setServiceInfo方法。注意,只有绑定到类/对象时,系统才能获取到该信息:


AccessibilityServiceInfo info = new AccessibilityServiceInfo;info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;// timeout (ms) after the most recent event of a given type before notificationinfo.notificationTimeout = 50;info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC |                        AccessibilityServiceInfo.FEEDBACK_AUDIBLE |                        AccessibilityServiceInfo.FEEDBACK_HAPTIC |                        AccessibilityServiceInfo.FEEDBACK_SPOKEN |                        AccessibilityServiceInfo.FEEDBACK_VISUAL;info.packageNames = new String[1];// only handle this packageinfo.packageNames[0] = getPackageName;setServiceInfo(info);  

服务被启动且被系统绑定之后,才能接收事件并传递给onAccessibilityEvent方法:


@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {    // here we check to see if it was a 'click' event    if(event.getEventType == AccessibilityEvent.TYPE_VIEW_CLICKED) {        // do something with the click event    }}  

现在,对事件的响应方式已经有多种备选了。通常情况下,Vibrator Service提供了包含声音或语言的触摸式响应。Vibrator是系统级的服务,它是通过context getSystemService方法获取的。一旦获取到Vibrator对象,当对事件进行响应时,就可以使用某一种震动模式了:


// get VibratorVibrator vibrate = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);// pattern to vibrate withlong pattern = new long { 0L, 100L };// vibratevibrate.vibrate(pattern, -1);  

Android提供了TextToSpeech引擎,可以借助这个引擎实现语音功能。为了使用这个TextToSpeech引擎,首先需要实例化一个android.speech.tts.TextToSpeech类,它对TextToSpeech引擎执行初始化。初始化完成之后,就可以调用这个类的speak方法生成语音。可以使用各种方法和选项,例如设置语言、音调和音速。当不再需要TextToSpeech实例时,记得调用shutdown方法释放它占用的资源:


TextToSpeech tts = new TextToSpeech(thisContext,     new TextToSpeech.OnInitListener {    @Override    public void onInit(int status) {        // notification when the TextToSpeech Engine has been initialized    });// say 'click'tts.speak("Click", 2, null);// no longer needed and thus we shut down and release the resourcestts.shutdown;  

有关可访问性的更多资源,可参考开源项目Eyes-Free(http://code.google.com/p/eyesfree)。