实施 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 与安卓辅助功能框架兼容。
  • 实施内容描述,以便 VoiceView 可以读出图像、按钮和其他屏幕对象的描述。
  • 添加列表和网格内容的使用提示,以便 VoiceView 可以帮助指导视障用户的交互。
  • 对静态内容实施描述文本,以便 VoiceView 可以在关联对象获得焦点时读出该内容。

用户体验 (UX) 建议

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

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

VoiceView 行为概述

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

将菜单按钮与 VoiceView 结合使用

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

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

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

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

  • 当 VoiceView 读出使用提示方向文本描述文本和所有其他静态内容时,用户可以使用倒回快进按钮控制导航。
  • 当用户第一次访问屏幕时,VoiceView 会自动读取方向文本
  • 当用户在暂停后将焦点移到控件时,VoiceView 会读出使用提示描述文本
  • 说话时,播放/暂停按钮会使 VoiceView 静音。
    • 如果电影或音乐正在播放且 VoiceView 正在说话,按播放/暂停一次会使 VoiceView 静音。
    • 在 VoiceView 静音后,再次按播放/暂停会暂停播放媒体。
  • 当用户按下菜单按钮时,VoiceView 不会将描述文本内容作为静态内容的一部分读出。

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

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

将查看模式与 WebView 结合使用

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

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

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

实施 VoiceView

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

  • 静态/不可设定焦点内容
  • 方向文本
  • 使用提示

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

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

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

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

示例 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 的方向文本

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

示例 1

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

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

AccessibilityNodeInfo 额外信息的键值用于配置 AccessibilityNodeInfo方向文本

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

实施使用提示 VoiceView

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

示例 1

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

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

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

值​ 示例
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());
 }
});