Dev on Google Glass

最近各类忙,Google Glass 的新闻却特别多,先是 XE11 发布隐藏了大量还没写入文档的特性,再是 GDK 发布,再是刚刚 Mirror API 正式向全部开发者开放,所以也更加特别忙。git

这篇博文根据前几天在珠海 GDG 上做技术分享时用的 Keynote 整理而成,主要介绍了 Glass 开发的一些基本概念。但愿能吸引更多对可穿戴设备感兴趣的开发者作·朋·友(笑)。github


Dev on Glass

目前 Google Glass 上有两种开发 Glassware(应用,特指为 Glass 定制的应用)的方式:一是经过 Mirror API 从云端进行开发,另外一种是使用 GDK 进行本地开发。segmentfault

"Mirror API or GDK?"

Mirror API 是一套 RESTful 接口,经过 OAuth 2.0 受权协议让 Glassware 与用户资料创建关系。它的背后是一个神奇的机制。Mirror API 云端储存了某个 Glassware 产生的、用户向某个 Glassware 分享的内容的完整副本。当 Glassware 向 Mirror API 更改了内容,或者用户在 Glass 上产生了更改,这些更改都会在恰当的时候被同步(背后是 Google Messaging Service 推送等等技术的支持),而且这个同步过程是由系通通一管理的,共享资源,所以也达到了节电的目的。同时,若是有必要,Mirror API 也会向你的 Glassware 反馈用户的更改(好比地理位置变动、分享了一张照片),所以在对实时性要求不是特别高的状况下,Mirror API 是一个不错的选择。服务器

而 GDK 则是基于 Android SDK (API 15) 的一套 SDK,用来开发直接运行在 Glass 本地的应用(众所周知 Glass 是基于 Android 4.0.3 的)。GDK 相对于 Mirror API 的优点是,能够直接访问各类底层传感器(好比陀螺仪、指南针、摄像头等等),而且由于是本地执行,所以更适合实时应用。ide

GDK 和 Mirror API 的对比
GDK 和 Mirror API 的对比ui

Mirror API

前面已经提到,使用 Mirror API 开发的 Glassware,并不须要直接接触用户的 Glass,而是与 Mirror API 打交道,由 Mirror API 负责将内容反映到 Glass 上。其关系大体上以下图所示。this

Mirror API 关系结构
Mirror API 关系结构google

Mirror API 的三个特色:idea

  1. 轻量级 - 资源共享,由系通通一调配,不会使 Glass 产生额外的开销
  2. On-The-Cloud - Glassware 本体在云端运行,开发者无需了解具体的 Android 开发知识,只须要具有基本的 HTTP 基础
  3. OAuth 2.0 - 用户经过 OAuth 2.0 向 Glassware 授予权限,Glassware 只能读写属于本身的数据

Mirror API 使用示例
Mirror API 使用示例spa

经过 Mirror API 开发须要了解 Glass 的几个基本交互元素,下面将一一介绍。

Timeline

Timeline
Timeline

Timeline(时间轴)是 Glass 上最最基本的交互元素,每一张卡片都表明一个信息。用户能够经过 Glass 的眼镜腿先后翻阅每一张卡片。

Timeline 结构
Timeline 结构

整个 Timeline 大体上是这么分布的:用户首先看到的是一个时钟主屏幕,全部操做都从这里开始;左边是正在发生的事情,好比正在运行的 GDK 应用,好比用户固定了的卡片;右边是过去的事情,相似一个瀑布流,旧的消息会被一直日后推,直到消失不见。

卡片组
卡片组

而对于具备相关性的卡片,好比一组电子邮件会话,则会展现为一个卡片组。用户能够展开它看到这个邮件主题的对话历史。

关于卡片的设计,谷歌官方对此给出了四点规范:

Don't get in the way · 不碍事

Don't get in the way

在你须要的时候,它就在那里;在你不须要的时候,你不会留意到它存在。Glassware 作的应当是你的我的助手,而不是掌控你的行为。

Keep it relevant · 说重点

Keep it relevant

Glassware 提供的信息应当是尽可能简洁的,不须要用户过多注意力去提取信息。因此,说重点,不要一大堆废话。

Build for people · 以人为本

Build for people

所谓以人为本,就是你只须要不多的交互,就能够达到目的。一个最典型的例子是,有妹纸发来短信,你只须要「ok glass, reply」,当你说完你的回复内容后,Glass 自动帮你将信息发送出去。整个过程甚至不须要动手,不须要点来点去各类菜单操做。

Avoid the Unexpected · 别做死

Avoid the Unexpected

深夜某个时候,哐当一声。。。嗯,某些公司的癖好,你们懂的。

Menu Items

Menu Items
Menu Items

另外一个重要的交互元素是 Menu(菜单)。每一张卡片均可以带有一个或多个菜单项,用户翻到这张卡片时,点击眼镜腿,就会看到这张卡片的操做菜单,每个菜单项都表明着特定的功能。开发者能够本身定义每张卡片应当出现什么菜单项。几个经常使用的菜单项有:

  • Share - 分享
  • Reply - 回复信息
  • Read aloud - 经过语音读出卡片内容
  • Call - 打电话

除此以外 Glass 自己还支持不少菜单指令,甚至还能由开发者本身定义菜单项,或者改变原有菜单项的显示文字。

Subscription

前面提到,使用 Mirror API 开发的应用并不能直接访问 Glass 设备自己,所以若是须要对用户的操做做出回应,就须要用到 Subscription 机制。

Subscription 机制的原理是,Glassware 向 Mirror API 注册一个 HTTPS 回调地址;当用户产生了特定动做(好比,向你的 Glassware 分享照片),Mirror API 就会向你的 HTTPS 地址发出一个 POST 请求;Glassware 接收到这个 POST 请求后,就能够从请求体中提取出必要的信息。

Voice Command

Glass 的全部操做都经过主屏幕开始。用户能够经过点击触摸板,或者使用「ok glass...」语音指令启动主菜单看到这些指令。

除了 Glass 自己提供的「Take a picture」、「Record a video」等等系统指令外,Glass 还向 Glassware 提供了不下 19 种语音指令,好比「Post an update」、「Take a note」等等。固然,还有 17 条指令直到目前还没出如今官方开发文档中,我就不说啦(没去 GDG 现场的朋友吃亏啦哈哈哈)。

Contacts

Share to somebody
Share to somebody

Contacts 在 Glass 上是一个比较开放的概念。它既能够是一个真实的人,也能够是一个虚构的概念。它的存在是做为一个接受指令的东西:

  • 用来做为拨打电话的目标
  • 接受分享
  • 回应语音指令

Location

Glass 同时也是一款很适合 LBS 的设备。然而 Glass 自己并不自带 GPS 模块,而是须要依赖所配对的手机的 GPS 进行定位。经过将 GPS、蜂窝数据等耗电模块转嫁给手机,也是 Glass 达到节电、轻便设计的一个手段。

Glass 与手机配对后,Mirror API 便会使用手机的地理位置信息(众所周知,只要你的 Android 手机开放了相关的权限,便会定时向 Google 上报地理位置)。经过相应的接口,Glassware 能够获取到 Glass 最近一次上报的地理位置。此外,经过 Subscription 机制,Glassware 也能够及时得知用户的地理位置变动,从而做出相应的回应。

"So, what about GDK?"

新鲜滚热辣,上个星期刚刚发布的 GDK。此次 GDG 聚会我也顺便简单介绍了一下。

Android SDK and GDK
Android SDK and GDK

GDK 自己基于 Android SDK (API 15),并在此基础上加入了一些 Glass 才有的特性。相较于 Mirror API,使用 GDK 开发的 Glassware 是一个 APK 格式的 Android 应用,运行在 Glass 本地,而且可以访问 Glass 自己的一些底层传感器(好比指南针、陀螺仪等)。

这里主要介绍一些 Glass 特有的概念。

Live Card

Live Card
Live Card

使用 GDK 开发的 Glassware 能够向 Timeline 主屏幕插入一条语音指令做为启动触发器;当用户触发这个指令时,Glass 将会通知 Glassware 的服务;此时 Glassware 能够建立一组 Live Card 向用户展现运行状态。

所谓的 Live Card,实际上就是 Timeline 主屏幕左侧的卡片,表示正在进行的事情。Glassware 经过 Android 四大组件之一的 Service 能够在后台更新这张 Live Card。同时,用户也能够点击这张 Live Card 调出 Glassware 的菜单,进行一些操做或者退出 Glassware。

目前 Google Glass 开发团队在 GitHub 上提供了几个 GDK Live Card 的示例,有兴趣的朋友能够参考一下:

  • Stopwatch - 秒表,主要演示了实时绘制 Live Card 界面
  • Compass - 指南针,主要演示了指南针传感器的调用
  • Timer - 倒计时器,主要演示了菜单

此外我本身也正在尝试移植一个 VNC 服务器的 Android 实现,原本打算 GDG 现场用来在大屏幕展现 Glass 的界面的,结果现场的 WiFi 不给力呀……这东西如今也被我改得各类乱(晕)

Immersion

Immersion
Immersion

Live Card 本质上仍是让用户与 Timeline 交互,Glassware 只做为数据提供。而 Immersion,顾名思义,直接跳出 Timeline 进入到你的 APK 中,而后就能够彻底掌控用户的交互。

"...Have any ideas?"

一些干货:

  • GlassX.cn - 咱们团队的一个 Glass 门户,上面有许多 Glass 最新的资讯;也是一个点子交流平台。
  • @Glass-X - 咱们的团队的微博,分享各类最新的 Glass 资讯。
  • developers.google.com/glass - 官方 Google Glass 开发文档

欢迎各位对 Google Glass 和其它可穿戴式设备感兴趣的朋友联系咱们,和咱们分享各类天马行空的玩法。也能够直接给我发邮件:xx@glassx.cn


Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.
本文内容主要参考官方文档总结而成,部分图片来自官方文档。转载请注明出处。

相关文章
相关标签/搜索