开发人员控制台

实现VoiceView辅助功能


实现VoiceView辅助功能

Amazon Fire TV内置的VoiceView屏幕阅读器可让视障用户浏览Fire TV用户界面。借助VoiceView,视障用户可以使用标准的Fire TV导航机制(遥控器上的向上向下向左向右按钮)在屏幕上移动输入焦点。当焦点更改时,VoiceView会自动朗读当前焦点项目。此功能类似于旧版VoiceView的“标准导航”模式。

在2016年12月的软件更新中,Fire TV上的VoiceView屏幕阅读器进行了几项关键更改。对于在应用中实现VoiceView支持,本页讨论了用户体验(UX)建议,以帮助您为Fire TV应用的盲人用户创建最佳体验。

VoiceView实现核对清单

使用以下核对清单,确保您的Amazon Fire TV应用与VoiceView屏幕阅读器的交互满足亚马逊推荐的标准。

技术实现建议

您的应用应实现VoiceView的以下方面:

  • 确认您应用的UI与Android辅助功能框架兼容。
  • 实现内容描述,以便VoiceView可以读出图像、按钮和其他屏幕对象的描述。
  • 添加列表和网格内容的Usage Hints(使用提示),以便VoiceView可以帮助指导视障用户的交互。
  • 对静态内容实现Described By(描述方式),以便VoiceView可以在关联对象获得焦点时读出该内容。

用户体验(UX)建议

您的应用应为VoiceView实现以下用户体验建议:

  • VoiceView读出获得焦点的项目内容,包括屏幕上以可视化形式表示的所有信息,例如名称或剧集编号。
  • VoiceView读出Orientation Text(导览文本)Usage Hints,以帮助用户了解如何在屏幕UI中导航。
  • VoiceView通过Described By文本自动读出静态内容,在用户按下“菜单”按钮时手动读出,或者在用户进入查看模式并逐步浏览屏幕项目时读出。
  • VoiceView读出设置信息,包括激活URL和代码。
  • VoiceView支持节目选择、节目信息、播放和字幕设置等功能和任务。

VoiceView行为概述

用户可以使用菜单和其他按钮在Amazon Fire TV用户界面和启用VoiceView的应用中导航。

将菜单按钮与VoiceView结合使用

启用VoiceView时,对菜单按钮使用以下约定:

  • 要启用或禁用VoiceView,请同时按后退菜单按钮两秒钟。
  • 启用VoiceView后,VoiceView控制菜单按钮和播放/暂停按钮(当VoiceView正在朗读时)。
  • 系统或应用从菜单按钮接收双击事件。
  • 按一下菜单按钮将按以下顺序从屏幕读取信息:
    1. Usage Hints
    2. Orientation Text
    3. Described By文本
    4. 所有其他静态内容

使用播放/暂停、倒回和快进按钮来控制语音

启用VoiceView时,请使用以下导航惯例:

  • 当VoiceView读出Usage HintsOrientation TextDescribed By文本和所有其他静态内容时,用户可以使用倒回快进按钮控制导航。
  • 当用户首次访问屏幕时,VoiceView自动读出Orientation Text
  • 当用户在暂停后将焦点移到控件时,VoiceView会读出Usage HintsDescribed By文本。
  • 朗读时,播放/暂停按钮会使VoiceView静音。
    • 如果电影或音乐正在播放且VoiceView正在朗读,按播放/暂停一次会使VoiceView静音。
    • 在VoiceView静音后,再次按播放/暂停会暂停播放媒体。
  • 当用户按下菜单按钮时,VoiceView不会将Described By内容作为静态内容的一部分读出。

VoiceView的查看模式允许用户仔细探索Amazon Fire TV屏幕的网格布局,类似于在平板电脑上使用屏幕阅读器的线性导航。按照以下约定在您的应用中使用查看模式:

  • 按住菜单按钮进入查看模式,这将由VoiceView宣布。
  • 方向控制器上的向左向右按钮控制线性导航。
  • 如果用户在不可操作的项目获得焦点时按选择,VoiceView会说“无法选择此项”。
  • 按住菜单按钮退出查看模式。
  • 退出查看模式后,辅助功能的焦点将返回到先前缓存的键盘焦点位置,并且VoiceView会重复宣布该焦点。

将查看模式与WebView结合使用

WebView可以表示应用中的复杂UI,其中包含可操作的项目(如链接)和不可操作的项目(如静态文本和图像)。VoiceView支持WebView,因为它们经常被Amazon Appstore中的许多应用使用。在启用了VoiceView的WebView中,用户可以使用查看模式在屏幕上的所有项目中导航,包括可操作的项目,并判定静态内容项目的上下文。“Described By”内容在WebView中不可用。

首次启用查看模式时,粒度级别默认为各个控件的移动。按向上向下键可在可用的粒度选项之间循环,例如字符、字词、控件或窗口。Web内容中的粒度选项包括链接、列表或标题。这些阅读粒度允许用户拼出女演员的名字,或者更高效地浏览网页内容等。使用以下约定在各个粒度选项间导航:

  • 向左键以当前选定粒度返回到上一个项目。
  • 向右键移动到下一个项目。
  • 进入查看模式时,粒度级别将重置为“控制”。

实现VoiceView

本节针对以下类型的内容讨论实现VoiceView的指南:

  • 静态/不可设定焦点内容
  • Orientation Text
  • Usage Hints

在静态(不可设定焦点)内容上实现VoiceView支持

VoiceView提供了两种在静态(不可设定焦点)内容间导航的机制,以便视障用户可以访问此内容: (1)使用菜单快进倒回按钮,以及(2)查看模式(下文讨论)。VoiceView支持标记,应用可以使用这些标记将此静态(不可设定焦点)内容与可设定焦点的项目相关联。

如果获得焦点的项目在屏幕上具有未包含在项目内容描述中的其他详细信息,请使用Described By。在用户短暂停留在该项目上后,系统将读出这些详细信息。在用户停留在某个项目上之前,在项目之间的持续移动不会读出详细信息。

以下示例说明用户如何在两种不同场景中浏览静态内容:

示例1

请考虑用于在电影目录中导航的Amazon Fire TV启动程序屏幕。屏幕顶部的文本将更新,以显示当前获得焦点的项目的名称、描述、评级和其他信息。由于每次用户选择影片时,此不可设定焦点的内容都会更新,因此应使用describedBy额外信息来描述包含所选影片的节点。这样一来,在用户短暂停留在该项目上后,系统将自动读出此信息。
示例2

考虑一个Fire TV电影详细信息视图,其中电影名称、年份、持续时间、星级等都是静态内容。用户按菜单以提示VoiceView朗读这些内容。然后,用户使用快进倒回按钮进行导航。

将静态内容的片段或容器与可设定焦点视图关联:

  1. 从该视图的AccessibilityNodeInfo中,在extras包中设置com.amazon.accessibility.describedBy的键值。
  2. 将值设置为一个字符串,其中包含容器或视图的视图ID的空格分隔列表,这些容器或视图包含该项目的描述。

    当VoiceView遇到设置了com.amazon.accessibility.describedBy键的项目时,它将请求AccessibilityNodeInfo对象的列表,以获取由com.amazon.accessibility.describedBy值指定的视图ID。然后,VoiceView会根据您的详细程度设置读出相应的文本或内容描述。

代码示例

// 您可以在一个按钮上设置额外信息,该按钮由
//屏幕上其他位置的一些静态文本描述,如下所示。
Button button = (Button) findViewById(R.id.button);
button.setAccessibilityDelegate(new View.AccessibilityDelegate() {
  public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
    super.onInitializeAccessibilityNodeInfo(host, info);
    info.getExtras().putString("com.amazon.accessibility.describedBy", R.id.movie_title_1 + " " + R.id.actors_1 + " " + R.id.description_1);
    info.setEnabled(host.isEnabled());
  }
});

实现VoiceView的Orientation Text

为了帮助新用户了解Amazon Fire TV屏幕的布局,VoiceView支持Orientation Text,这是VoiceView在第一次看到包含该文本的容器时或当用户按菜单按钮时读出的本地化文本。在区域的容器视图上应用导览文本,其中常规布局的高级描述将对第一次遇到该布局的用户非常有用。

示例1

用户首次登陆Fire TV主页时,VoiceView会读出“主菜单。包含顶级选项,如搜索、主页、电影和设置。选择某个项目后,屏幕的下部将更新以包含相关内容。”
示例2

考虑您的应用的屏幕,它具有包含许多电影封面视图的LinearLayout。要向盲人客户传达此屏幕的用途,您可以在LinearLayout的AccessibilityNodeInfo上设置Orientation Text,以解释“此屏幕包含一系列电影。导航到每部影片可收听剧情简介。选择一部电影可进行播放。”

com.amazon.accessibility.orientationText额外信息的键值用于配置AccessibilityNodeInfoOrientation Text

  • 用户第一次遇到包含Orientation TextAccessibilityNodeInfo时,VoiceView会读出该文本。
  • 在后续访问中,用户可以通过按菜单按钮请求上下文信息,这会使VoiceView读出Orientation Text

实现Usage HintsVoiceView

对于没有视觉障碍的用户,屏幕的布局提供了如何在该屏幕中导航以及与之交互的视觉提示。例如,如果项目A位于屏幕上的项目B上方,则用户凭直觉即可知道按向下按钮将从A导航到B。但是,视障用户可能需要额外的提示来帮助他们与屏幕进行交互。为了帮助解决此问题,VoiceView支持一组额外信息,用于定义帮助在屏幕中进行导航的Usage Hint

示例1

考虑一个具有水平电影列表的屏幕。最佳实践是添加“使用向左向右键在电影之间移动”的Usage Hint
示例2

考虑一个具有多行内容网格的屏幕,其中第一行获得焦点,例如“客户还观看了”。在这种情况下,请使用com.amazon.accessibility.usageHint.remote以及文本,例如“按向左向右键可查找项目,按向上向下键可在项目集合之间移动”。 在网格的容器视图(网格所有行和列的父项)上设置此额外信息值。

避免为网格中的单个对象设置使用提示,否则会导致在导航时不必要地重复Usage Hint。只有在进入容器时才会读出Usage Hint,而在同一容器内的项目之间移动时不会重复使用提示。

值​ 示例
com.amazon.accessibility.usageHint.remote
(仅限Fire TV)
描述如何通过遥控器使用或导航项目的字符串。 “按左右键以查找项目。”
com.amazon.accessibility.usageHint.touch
(仅限Fire平板电脑)
有关如何使用触摸屏与项目进行交互的描述。 “双击以选择。双击并按住可获取选项。”

代码示例

// 您可以在列表中设置额外信息以提供使用提示,如下所示。
ListView listView = (ListView) findViewById(R.id.my_list);
listView.setAccessibilityDelegate(new View.AccessibilityDelegate() {
  public void onInitializeAccessibilityNodeInfo(View host,
    AccessibilityNodeInfo info) {
      super.onInitializeAccessibilityNodeInfo(host, info);
      info.getExtras().putString("com.amazon.accessibility.usageHint.touch",
       getString(R.string.double_tap_hint));
      info.getExtras().putString("com.amazon.accessibility.usageHint.remote",
       getString(R.string.press_select_hint));
      info.setEnabled(host.isEnabled());
 }
});