Accessibility:

许多Android使用者因为各种情况导致他们要以不同的方式与手机交互。

这包括了有些用户由于视力上,身体上,年龄上的问题致使他们不能看完整的屏幕或者使用触屏,也包括了无法很好接收到语音信息和提示的听力能力比较弱的用户。

Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音(这个不支持中文),触觉反馈,手势操作,轨迹球和手柄操作。

开发者可以利用这些服务使得程序更好用。

开发者可以搭建自己的Accessibility服务,这可以加强可用性,例如声音提示,物理反馈,和其他可选的操作模式。

Accessibility服务可以为所有的应用程,一组应用程序或单个应用程序提供这些增强功能。

官方文档中,有三篇文章介绍了Accessibility,这里只要是第三篇关于AccessibilityService的使用:

AccessibilityService使用很简单:

1. 新建一个类继承AccessibilityService,并在AndroidManifest文件里注册它:

[html] view plain copy
  1. <application>
  2. <serviceandroid:name=".MyAccessibilityService"
  3. android:label="@string/accessibility_service_label">
  4. <intent-filter>
  5. <actionandroid:name="android.accessibilityservice.AccessibilityService"/>
  6. </intent-filter>
  7. </service>
  8. <uses-permissionandroid:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>
  9. </application>
在<application>标签下添加继承了AccessibilityService的子类MyAccessibilityService,同时加入相应的权限。


2. 在子类MyAccessibilityService里实现几个重要的重载方法:

onServiceConnected() - 可选。系统会在成功连接上你的服务的时候调用这个方法,在这个方法里你可以做一下初始化工作,例如设备的声音震动管理,也可以调用setServiceInfo()进行配置工作。

onAccessibilityEvent() - 必须。通过这个函数可以接收系统发送来的AccessibilityEvent,接收来的AccessibilityEvent是经过过滤的,过滤是在配置工作时设置的。

onInterrupt() - 必须。这个在系统想要中断AccessibilityService返给的响应时会调用。在整个生命周期里会被调用多次。

onUnbind() - 可选。在系统将要关闭这个AccessibilityService会被调用。在这个方法中进行一些释放资源的工作。


3. 配置工作

一般在onServiceConnected()方法里进行。/Android-Sample/ApiDemos/com.example.android.apis.accessibility.ClockBackService 配置代码:

[java] view plain copy
  1. privatevoidsetServiceInfo(intfeedbackType){
  2. AccessibilityServiceInfoinfo=newAccessibilityServiceInfo();
  3. //Weareinterestedinalltypesofaccessibilityevents.
  4. info.eventTypes=AccessibilityEvent.TYPES_ALL_MASK;
  5. //Wewanttoprovidespecifictypeoffeedback.
  6. info.feedbackType=feedbackType;
  7. //Wewanttoreceiveeventsinacertaininterval.
  8. info.notificationTimeout=EVENT_NOTIFICATION_TIMEOUT_MILLIS;
  9. //Wewanttoreceiveaccessibilityeventsonlyfromcertainpackages.
  10. info.packageNames=PACKAGE_NAMES;
  11. setServiceInfo(info);
  12. }

需要建立一个AccessibilityServiceInfo对象,通过这个对象设置监听系统事件类型,服务的反馈类型(震动,语音,声音),事件时间间隔,你想要监听的包名(或者说是应用程序)。最后调用setServiceInfo()进行设置。

注:从Android4.0开始,开发者可以通过在AndroidManifest里添加<meta-data>标签,在标签里指出配置文件的位置,样例代码:

[html] view plain copy
  1. <serviceandroid:name=".MyAccessibilityService">
  2. ...
  3. <meta-data
  4. android:name="android.accessibilityservice"
  5. android:resource="@xml/accessibility_service_config"/>
  6. </service>
然后在/res/xml/accessibility_service_config.xml

[html] view plain copy
  1. <accessibility-servicexmlns:android="http://schemas.android.com/apk/res/android"
  2. android:description="@string/accessibility_service_description"
  3. android:packageNames="com.example.android.apis"
  4. android:accessibilityEventTypes="typeAllMask"
  5. android:accessibilityFlags="flagDefault"
  6. android:accessibilityFeedbackType="feedbackSpoken"
  7. android:notificationTimeout="100"
  8. android:canRetrieveWindowContent="true"
  9. android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"
  10. />

更多详细的可以参见官方文档,或者可以看samples里的两个例子:ClockBackService, TaskBackService

更多相关文章

  1. android camera系统3A模式及其状态转换(二)
  2. Android 结束进程的方法
  3. Android 常用的画图方法
  4. Android中Sample的使用方法
  5. Android图片圆角 用简单的方法实现
  6. Android Camera子系统代码流程1
  7. Mac Android Studio获取数字签名的方法
  8. Android 4.0 用户输入子系统
  9. android 中 系统日期时间的获取

随机推荐

  1. Android 控件开发之ImageButton
  2. 那些iOS和Android跨平台解决方案
  3. EditText要求输入整数数字且要从1开始,不
  4. Android自带实例分析开篇---Eclipse运行a
  5. android:GLSurfaceView绘制bitmap图片及g
  6. Android画圆角矩形图片,并在图片上写字
  7. 浅谈RxJava与2.0的新特性
  8. okhttp的应用详解与源码解析--http的发展
  9. Android颜色选择器
  10. android的camera