持续性任务模式

本指南介绍了组成秒表形式的持续性任务的组件。随着用户完成某项任务,持续性任务会在时间轴中显示实时卡片,并允许用户根据其需要进入和退出实时卡片。

在此过程中,您还将了解对于自行构建 Glassware 非常重要的设计、开发和分发提示。

准备工作

秒表的完整源代码可在 GitHub 上找到。在开始之前,请将其导入 Android Studio,因为本指南会对其进行大量参考。

  1. 在“快速入门”屏幕中,依次点击从版本控制中签出 > Git
  2. Stopwatch 中复制克隆网址。
  3. 将克隆网址粘贴到 Vcs 代码库网址中,然后点击克隆
  4. 在下一屏幕上点击
  5. 在下一屏幕上点击 OK
  6. 构建项目,然后点击 Play 按钮,在已连接的 Glass 上运行项目。请务必查看示例的 README 了解调用详情。

学习内容

您将学习如何使用 Android SDK 中的组件来构建“秒表”的大多数持续性任务,然后利用 GDK 打造 Glass 体验。下面列出了您需要了解的主题:

  • 构建自定义视图以绘制到实时卡片中
  • 创建服务来管理直播卡
  • 提供可让用户从时间轴中移除直播卡片的菜单
  • 从主语音菜单中声明语音触发器来启动秒表

设计

在开始开发之前 先花些时间设计您的 Glassware这样,您便可以更好地了解哪些界面流程在 Glass 上效果最佳、您将使用哪些语音指令,以及您的卡片将如何显示。

当然,设计 Glassware 是一个迭代过程,您现在设计的部分功能会有所变化,但一开始就要充分利用这些工作对打造出色的体验至关重要。

界面流程

设计界面流程是一项简单的练习,让您可以在编写一行代码之前直观呈现 Glassware。 我们所做的一切都是针对我们打造的 Glassware!

我们来介绍一下秒表的主要界面元素,以便您了解界面的工作原理,以及在创建您自己的 Glassware 时此流程会有多大帮助。

主界面

秒表仅包含一个主要流程,因为它的体验相当简单。

当用户调用 Glassware 时,系统会在实际秒表开始之前显示 3 秒的倒计时插页式广告。然后,系统会持续显示秒表,直到用户通过停止菜单项将其从时间轴中移除。

语音命令

您应该在设计过程中尽早确定语音指令。语音指令可让用户从 Glass Home(时钟卡片)语音菜单(如果需要)启动 Glassware,这也是您设计 Glassware 的主要方式之一。

例如,发布更新命令适用于即发即弃的模型,在该模式下,用户可以说出文本,而 Glassware 无需用户进一步干预即可处理文本。这样一来,用户就能快速恢复正常运行

另一方面,对于像玩游戏这样的内容,您通常需要让用户进入启动画面,以便他们首先确定方向。由于此语音指令很可能会带来沉浸感,因此您可以预期用户会看到额外的屏幕和菜单,从而开始游戏。在语音指令之后立即让用户进入游戏体验通常是很糟糕的游戏体验。

秒表使用启动秒表语音指令。用户调用语音指令后,秒表会在简短的插页式广告倒计时画面后立即启动,这比提供菜单项来启动要快。对于持续性任务,您通常需要在合理的范围内尽可能让用户尽快获得体验。

卡片布局

无论您是要构建沉浸式体验还是实时卡片,都应尽可能使用 CardBuilderXML 布局

通常情况下,您仍然需要构建自己的布局,因此请按照我们的界面准则操作,以获得外观最佳的 Glassware。

秒表遵循常规布局准则,但具有使用标准 Android 组件(如视图和布局)的自定义界面布局。

开发

如需开发实时卡片,您可以使用与 Android 开发相同的工具来构建大部分 Glassware,然后使用 GDK 插件中的 API 访问特定于 Glass 的功能,例如实时卡和语音指令。

您将经常使用常用的 Android 组件创建 Glassware,但请注意,有些概念有时是不同的。例如,您可以使用 Android 服务渲染和管理实时卡片,这并不是您在传统 Android 应用中使用服务的典型方式。另一个示例是直播卡片没有自己的界面上下文,因此您必须使用显示实时卡片菜单的 shell activity。本指南的后面部分将介绍如何构建这些组件。

“开发”的其余部分将介绍秒表的结构以及您之前导入的项目的主要组件。建议您现在启用 Android Studio,以便按照说明操作。源代码本身包含注释,因此,本部分将介绍每个文件的简要用途,并介绍一些可应用于您自己的 Glassware 的实用提示。

语音命令

您可以使用 XML 资源文件创建语音指令,该文件指定您使用的命令,然后在 AndroidManifest.xml 文件中指定 XML 资源。

以下文件与秒表语音指令相关联:

  • res/xml/voice_trigger_start.xml - 声明要使用的语音指令。
  • AndroidManifest.xml - 声明在说出语音指令时要启动的实时卡服务。

倒计时视图

秒表在实际记录时间前显示倒计时,让用户知道即将过去的时间。

以下文件与倒计时视图相关联:

  • res/layout/card_countdown.xml - 定义倒计时查看器的布局
  • src/com/google/android/glass/sample/stopwatch/CountDownView.java - 定义倒计时的视图。

精密计时器视图

这是秒表的主视图。其中显示了自倒计时开始后经过的时间。以下文件与精密计时器视图相关联:

  • res/layout/card_chronometer.xml - 定义秒表视图的布局
  • src/com/google/android/glass/sample/stopwatch/ChronometerDrawer.java - 定义如何渲染视图。实时卡服务会调用此类以将其绘制到实时卡服务中。
  • src/com/google/android/glass/sample/stopwatch/ChronometerView.java - 使用前一布局作为其界面的秒表视图。

秒表服务

此服务用于管理实时卡的生命周期和渲染。以下文件与此服务相关联:

  • src/com/google/android/glass/sample/stopwatch/StopwatchService.java - 管理秒表实时卡,并处理服务生命周期。

动态卡片没有自己的菜单来显示菜单,因为它们会在时间轴上下文中呈现其界面。

如需绕过此限制,请创建一个显示在时间轴顶部的半透明 activity,然后在用户点按实时卡片后立即显示该 activity 的菜单。

  • src/com/google/android/glass/sample/stopwatch/MenuActivity.java - 声明在显示 activity 时立即显示菜单的半透明菜单 activity。
  • res/values/styles.xml - 定义应用于菜单的半透明样式。
  • res/menu/stopwatch.xml - 包含必填 Stop 菜单项的菜单资源。

Android 清单

AndroidManifest.xml 文件描述了 Glassware 的主要组件,以便系统知道如何运行该组件。Charades 的清单声明了以下内容:

  • Glassware 的图标和名称。如果有多个 Glassware 响应同一语音指令,则 Glass 会在主触摸菜单中显示此信息。
  • 与秒表相关的所有服务和活动。只有这样,系统才能知道如何启动 Glassware 的组件。
  • 语音指令和 intent 过滤器,用于在语音命令发出时启动实时卡片服务。
  • Glassware 的版本代码。每次将此 APK 的新版本上传到 MyGlass 时,都必须更新此代码(通常也包括版本名称)。