Android Accessibility 辅助功能简单介绍
android accessibility 辅助功能
accessibility:
许多android使用者因为各种情况导致他们要以不同的方式与手机交互。
这包括了有些用户由于视力上,身体上,年龄上的问题致使他们不能看完整的屏幕或者使用触屏,也包括了无法很好接收到语音信息和提示的听力能力比较弱的用户。
android提供了accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音(这个不支持中文),触觉反馈,手势操作,轨迹球和手柄操作。
开发者可以利用这些服务使得程序更好用。
开发者可以搭建自己的accessibility服务,这可以加强可用性,例如声音提示,物理反馈,和其他可选的操作模式。
accessibility服务可以为所有的应用程,一组应用程序或单个应用程序提供这些增强功能。
官方文档中,有三篇文章介绍了accessibility,这里只要是第三篇关于accessibilityservice的使用:
accessibilityservice使用很简单:
1. 新建一个类继承accessibilityservice,并在androidmanifest文件里注册它:
<application> <service android:name=".myaccessibilityservice" android:label="@string/accessibility_service_label"> <intent-filter> <action android:name="android.accessibilityservice.accessibilityservice" /> </intent-filter> </service> <uses-permission android:name="android.permission.bind_accessibility_service" /> </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 配置代码:
private void setserviceinfo(int feedbacktype) { accessibilityserviceinfo info = new accessibilityserviceinfo(); // we are interested in all types of accessibility events. info.eventtypes = accessibilityevent.types_all_mask; // we want to provide specific type of feedback. info.feedbacktype = feedbacktype; // we want to receive events in a certain interval. info.notificationtimeout = event_notification_timeout_millis; // we want to receive accessibility events only from certain packages. info.packagenames = package_names; setserviceinfo(info); }
需要建立一个accessibilityserviceinfo对象,通过这个对象设置监听系统事件类型,服务的反馈类型(震动,语音,声音),事件时间间隔,你想要监听的包名(或者说是应用程序)。最后调用setserviceinfo()进行设置。
注:从android4.0开始,开发者可以通过在androidmanifest里添加<meta-data>标签,在标签里指出配置文件的位置,样例代码:
<service android:name=".myaccessibilityservice"> ... <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibility_service_config" /> </service>
然后在/res/xml/accessibility_service_config.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/accessibility_service_description" android:packagenames="com.example.android.apis" android:accessibilityeventtypes="typeallmask" android:accessibilityflags="flagdefault" android:accessibilityfeedbacktype="feedbackspoken" android:notificationtimeout="100" android:canretrievewindowcontent="true" android:settingsactivity="com.example.android.accessibility.servicesettingsactivity" />
更多详细的可以参见官方文档,或者可以看samples里的两个例子:clockbackservice, taskbackservice。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!