当前位置: 首页 > 编程日记 > 正文

如何使用好android的可访问性服务(Accessibility Services)

原文:http://android.eoe.cn/topic/android_sdk

* 主题*

Manifest声明和权限

  • 可访问性服务声明

  • 可访问性服务配置

AccessibilityService方法

获得事件细节

示例代码

  • 主要的类*

AccessibilityService

AccessibilityServiceInfo

AccessibilityEvent

AccessibilityRecord

AccessibilityNodeInfo

  • 同时要看*

Implementing Accessibility

一个可访问性服务,是一个为增强用户界面并帮助残疾用户的应用程序,或者用户可能无法完全与设备的交互。例如:用户正在开车、照顾一个小孩或者参加一个非常吵闹的聚会,那么用户就有可能需要添加额外的或者可替代的用户反馈方式。

Android提供了标准的可访问性服务,包括反馈,还有开发者可创建和发布他们自己的服务。这个文档解释了建立一个可访问性服务的基础知识。

这种构建和部署可访问性服务的技能被引入Android1.6(API级别4)并且在Android4.0(API等级14)中得到显著的改进。这个Android支持库伴随着Android4.0的发布也更新到可以提供支持以前Android1.6的增强可访问性的特性。开发者的目标是广泛兼容可访问性的服务被鼓励使用在支持库中和在Android4.0介绍更先进的可访问特性的开发。

Manifest声明和权限

提供可访问性的应用程序,为了被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)或者更高级中部署所有可访问性的服务都需要这些声明。

可访问性服务配置(configuration)

可访问性服务还必须提供一个,指定能够处理和添加额外信息服务的可访问事件类型的配置。这个可访问性服务的配置包含在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 方法

一个提供可访问性服务的应用程序必须继承AccessibilityService类,并且重写这个类的方法。这些方法是按从服务程序开始(onServiceConnected()))的时候这些方法(onAccessibilityEvent()), onInterrupt()))就一直运行到服务关掉(onUnbind()))的Android系统调用的顺序呈现的。

  • onServiceConnected())--(可选的)当这个方法成功连接到你的可访问性服务,系统将调用这个方法。用这个方法可以一次性的设置你的服务,包括连接到用户反馈系统服务,例如音频的管理或者设备振动器。如果你想在运行的时候设置你的服务配置或者一次性的调整,这个是很方便定位哪个服务系统调用setServiceInfo())。
  • onAccessibilityEvent())--(必须有)当这个方法检测到一个与你可访问性服务指定的事件过滤参数相匹配的可访问性事件(AccessibilityEvent)系统将调用这个方法回应。例如:在一个应用程序中,当用户点击按钮或者一个用户界面启动,你的哪个可访问性服务将提供反馈。当这种情况发生,系统将调用与AccessibilityEvent相关的服务方法,这样你才可以做出响应(interpret)并给用户提供反馈。在你的服务生命周期期间,这个方法可以被多次调用。
  • onInterrupt())--(必须有)当系统想中断你的服务系统提供的反馈,这个方法就会被调用。通常是对用户采取行动做出响应,例如:移动焦点到一个不同的用户控制界面而不是你当前提供反馈的那个界面。在你的服务生命周期期间,这个方法可以被多次调用。
  • onUnbind())--(可选的)当系统想关闭这个可访问性服务,这个方法就会被调用。用这个方法可以一次性的关闭程序 ,包括取消使用者的反馈系统服务的分配,例如:音频管理或者设备振动器。 这些回调的方法提供了你的可访问性服务的基本构架。由你决定怎样处理Android系统以AccessibilityEvent对象形式提供的数据和怎样提供给用户反馈。

获得事件的详细信息

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)。

相关文章:

自动驾驶人的福音!Lyft公开Level 5部署平台Flexo细节

作者 | Mathias Gug等&#xff0c;Lyft Level 5 软件工程师译者 | Lucy编辑 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;经过一年半的 bootstrapping&#xff08;一种再抽样统计方法&#xff09;&#xff0c;Lyft 让 Level 5 实现区分非常…

Cygwin的安装及在Android jni中的简单使用举例

Cygwin是一个在windows平台上运行的类UNIX模拟环境&#xff0c;是cygnussolutions公司开发的自由软件。Cygwin是许多自由软件的集合&#xff0c;Cygwin的主要目的是通过重新编译&#xff0c;将POSIX系统上的软件移植到Windows上。Cygwin包括了一套库&#xff0c;该库在win32系统…

university, school, college, department, institute的区别

这些个词没有太大区别&#xff0c;有时候有些词是可以通用的&#xff0c;而有些用法则是随着地域时间的不同而变迁。一般说来&#xff0c;college译作“学院”&#xff0c;它是university &#xff08;综合性大学&#xff09;的一个组成部分&#xff0c;例如&#xff0c;一所综…

XML简介及举例

可扩展标记语言(eXtensibleMarkup Language&#xff0c;简称XML)&#xff0c;是一种标记语言。标记指计算机所能理解的信息符号&#xff0c;通过此种标记&#xff0c;计算机之间可以处理包含各种信息的文章等。如何定义这些标记&#xff0c;既可以选择国际通用的标记语言&#…

关于事务的传播特性和隔离级别的问题

REQUIRED&#xff1a;业务方法需要在一个事务中运行。如果方法运行时&#xff0c;已经处在一个事务中&#xff0c;那么加入到该事务&#xff0c;否则为自己创建一个新的事务。 NOT_SUPPORTED&#xff1a;声明方法不需要事务。如果方法没有关联到一个事务&#xff0c;容器不会为…

[Big Data - Kafka] kafka学习笔记:知识点整理

一、为什么需要消息系统 1.解耦&#xff1a; 允许你独立的扩展或修改两边的处理过程&#xff0c;只要确保它们遵守同样的接口约束。 2.冗余&#xff1a;消息队列把数据进行持久化直到它们已经被完全处理&#xff0c;通过这一方式规避了数据丢失风险。许多消息队列所采用的&q…

自然语言处理十问!独家福利

最近&#xff0c;NLP 圈简直不要太热闹&#xff01;预训练模型频频刷新榜单&#xff0c;让一众研究者、开发者“痛并快乐着”。自 2018 年 10 月&#xff0c;Google 提出 BERT 以来&#xff0c;NLP 领域预训练模型的发展仿佛坐上了火箭&#xff0c;完全控制不住。BERT 出世前&a…

BERT的成功是否依赖于虚假相关的统计线索?

作者 | 李理来源 | 个人博客导读&#xff1a;本文介绍论文Probing Neural Network Comprehension of Natural Language Arguments&#xff0c;讨论BERT在ACRT任务下的成绩是否依赖虚假的统计线索&#xff0c;同时分享一些个人对目前机器学习尤其是自然语言理解的看法。目录论文…

【电子基础】模拟电路问答

模拟电路基础知识问答整理 mystery 1、温度对半导体材料的导电性能有什么影响? 答&#xff1a;温度对半导体的导电性能有很大影响。当温度升高时&#xff0c;半导体材料内的自由电子和空穴数量迅速增加&#xff0c;半导体的导电性能将迅速提高。 2、什么是本征半导体和杂质半导…

XML解析简介及Xerces-C++简单使用举例

XML是由World WideWeb联盟(W3C)定义的元语言。它已经成为一种通用的数据交换格式&#xff0c;它的平台无关性&#xff0c;语言无关性&#xff0c;系统无关性&#xff0c;给数据集成与交互带来了极大的方便。XML在不同的语言里解析方式都是一样的&#xff0c;只不过实现的语法不…

[干货]Kaggle热门 | 用一个框架解决所有机器学习难题

新智元推荐 来源&#xff1a;LinkedIn 作者&#xff1a;Abhishek Thakur 译者&#xff1a;弗格森 【新智元导读】本文是数据科学家Abhishek Thakur发表的Kaggle热门文章。作者总结了自己参加100多场机器学习竞赛的经验&#xff0c;主要从模型框架方面阐述了机器学习过程中可能会…

gtest简介及简单使用

gtest是一个跨平台(Liunx、Mac OS X、Windows、Cygwin、Windows CE and Symbian)的C测试框架&#xff0c;有google公司发布。gtest测试框架是在不同平台上为编写C测试而生成的。从http://code.google.com/p/googletest/downloads/detail?namegtest-1.7.0.zip&can2&q下…

新浪微博推广网站的一些实践体会

本以为微博推广很难&#xff0c;每天都要刷粉刷内容的&#xff0c;也本以为做微博推广也很简单&#xff0c;一不卖产品、二不卖服务的&#xff0c;目的单纯灵活性强些&#xff0c;做了之后才发现都不是那么回事&#xff0c;微博虽然也过了“火了”&#xff0c;但新媒体还真是不…

AI和大数据如何落地智能城市?京东城市这6篇论文必读 | KDD 2019

来源 | 京东城市&#xff08;ID: icity-jd&#xff09;作为世界数据挖掘领域的最高级别的学术会议&#xff0c;ACM SIGKDD&#xff08;国际数据挖掘与知识发现大会&#xff0c;简称 KDD&#xff09;将于 2019 年 8 月 4 日—8 日在美国阿拉斯加州安克雷奇市举行。自 1995 年以来…

OSError: Could not find library geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so

OSError: Could not find library geos_c or load any of its variants [libgeos_c.so.1, libgeos_c.so 解决&#xff1a; sudo vim /etc/ld.so.conf 添加&#xff1a;/opt/source/geos-3.5.0/build/lib sudo ldconfig

五分钟搭建BERT服务,实现1000+QPS​,这个Service-Streamer做到了

作者 | 刘欣简介&#xff1a;刘欣&#xff0c;Meteorix&#xff0c;毕业于华中科技大学&#xff0c;前网易游戏技术总监&#xff0c;现任香侬科技算法架构负责人。之前专注游戏引擎工具架构和自动化领域&#xff0c;2018年在GDC和GoogleIO开源Airtest自动化框架&#xff0c;广泛…

Nagios+pnp4nagios+rrdtool 安装配置为nagios添加自定义插件(三)

nagios博大精深&#xff0c;可以以shell、perl等语句为nagios写插件&#xff0c;来满足自己监控的需要。本文写mysql中tps、qps的插件&#xff0c;并把收集到的结果以图形形式展现出来&#xff0c;这样输出的结果就有一定的要求了。 编写插件tps qps check_qps 插件如下内容 #…

OpenSSL简介及在Windows、Linux、Mac系统上的编译步骤

OpenSSL介绍&#xff1a;OpenSSL是一个强大的安全套接字层密码库&#xff0c;囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议&#xff0c;并提供丰富的应用程序供测试或其它目的使用。 SSL是SecureSockets Layer(安全套接层协议)的缩写&#xff0c;可以在Interne…

Guava Cache本地缓存在 Spring Boot应用中的实践

概述 在如今高并发的互联网应用中&#xff0c;缓存的地位举足轻重&#xff0c;对提升程序性能帮助不小。而 3.x开始的 Spring也引入了对 Cache的支持&#xff0c;那对于如今发展得如火如荼的 Spring Boot来说自然也是支持缓存特性的。当然 Spring Boot默认使用的是 SimpleCache…

Windows 8.1 Preview(Windows Blue)预览版简体中文官方下载(ISO完整版镜像)

Windows 8.1是微软继Windows 8以来的又一全新力作&#xff0c;又名Windows Blue&#xff08;视窗蓝&#xff0c;专注蓝屏30年&#xff09;&#xff0c;个人觉得Win8还是比较流畅的但大众始终觉得还是有很多需要改进或者改善的&#xff0c;如今微软为了迎合大众需求对Win8进行升…

Linux下编辑器vi/vim的使用介绍

vi编辑器是所有Unix及Linux系统下标准的编辑器。对Unix及Linux系统的任何版本&#xff0c;vi编辑器是完全相同的。 基本上vi可以分为三种状态&#xff0c;分别是命令模式(commandmode)、插入模式(insert mode)和底行模式(last line mode)&#xff0c;各模式的功能为&#xff1…

Clojure程序设计

《Clojure程序设计》基本信息作者&#xff1a; (美)Stuart Halloway Aaron Bedra [作译者介绍]出版社&#xff1a;人民邮电出版社ISBN&#xff1a;9787115308474上架时间&#xff1a;2013-3-1出版日期&#xff1a;2013 年3月开本&#xff1a;16开页码&#xff1a;230版次&#…

重磅!AI Top 30+案例评选正式启动

2019 年&#xff0c;人工智能应用落地的重要性正在逐步得到验证&#xff0c;这是关乎企业生死攸关的一环。科技巨头、AI 独角兽还有起于草莽的创业公司在各领域进行着一场多方角斗。进行平台布局的科技巨头们&#xff0c;正在加快承载企业部署 AI 应用的步伐&#xff0c;曾经无…

直播回顾 | 关于Apollo 5.0控制在环仿真技术的分享

Apollo 用于模型验证和测试的基于 Web 的仿真平台 Dreamland 已经更新到能使用更强大的场景编辑器和环控制模拟。基于 Apollo 流水线和机器学习的动力学模型&#xff0c;复杂度较高&#xff0c;同时基于 AI 的全景数据建模&#xff0c;模型精细度高&#xff0c;误差比传统方式可…

eclipes 安装 pytdev,svn,插件

1&#xff0c; python pydevhttp://pydev.org/updates2, svnhttp://subclipse.tigris.org/update3, 推荐http://subclipse.tigris.org/update_1.10.x 转载于:https://blog.51cto.com/swq499809608/1240873

FFmpeg简介及在vc2010下编译步骤

FFmpeg是一个开源的多媒体库&#xff0c;最新版本是2.4.3&#xff0c;它的License是LGPL或GPL。FFmpeg可以用来记录、转换数字音频、视频&#xff0c;并能将其转换为流的开源计算机程序。它包括了音/视频编码库libavcodec。FFmpeg是在Linux下开发出来的&#xff0c;但它可以在包…

医院六级电子病历建设思路及要点

产生背景 在医院电子病历信息化发展的过程中&#xff0c;先后经历了纸质病历、电子病历、结构化电子病历以及具有全医疗过程管理能力的电子病历四个阶段。临床业务需求质量的逐步提升&#xff0c;标准规范的逐步细化&#xff0c;互联网战略的落地实施&#xff0c;无疑对目前电子…

上手必备!不可错过的TensorFlow、PyTorch和Keras样例资源

作者 | 黄海广来源 | 机器学习初学者&#xff08;ID: ai-start-com&#xff09;TensorFlow、Keras和PyTorch是目前深度学习的主要框架&#xff0c;也是入门深度学习必须掌握的三大框架&#xff0c;但是官方文档相对内容较多&#xff0c;初学者往往无从下手。本人从github里搜到…

Linux下gdb调试工具的使用

gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。 gdb主要完成四个方面的功能&#xff1a;(1)、启动你的程序&#xff0c;可以按照你的自定义的要求随心所欲的运行程序&#xff1b;(2)、可让被调试的程序在你所指定的调试的断点处停住(断点可以是条件表达式)&#xf…

UESTC 1726 整数划分(母函数)

题目链接&#xff1a;http://222.197.181.5/problem.php?pid1726 题意&#xff1a;求n的划分数。一种划分方案中不能有相同的数字。 思路&#xff1a;(1x)(1x^2)(1x^3)……(1x^1000). int f[N];void init() {f[1]1;int a[N]{0};a[0]1; a[1]1;int i,j;for(i2;i<1000;i){for(…