最近各類忙,Google Glass 的新聞卻特別多,先是 XE11 發佈隱藏了大量還沒寫入文檔的特性,再是 GDK 發佈,再是剛剛 Mirror API 正式向全部開發者開放,所以也更加特別忙。git
這篇博文根據前幾天在珠海 GDG 上做技術分享時用的 Keynote 整理而成,主要介紹了 Glass 開發的一些基本概念。但願能吸引更多對可穿戴設備感興趣的開發者作·朋·友(笑)。github
目前 Google Glass 上有兩種開發 Glassware(應用,特指爲 Glass 定製的應用)的方式:一是經過 Mirror API 從雲端進行開發,另外一種是使用 GDK 進行本地開發。segmentfault
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 的對比ui
前面已經提到,使用 Mirror API 開發的 Glassware,並不須要直接接觸用戶的 Glass,而是與 Mirror API 打交道,由 Mirror API 負責將內容反映到 Glass 上。其關係大體上以下圖所示。this
Mirror API 關係結構google
Mirror API 的三個特色:idea
Mirror API 使用示例spa
經過 Mirror API 開發須要瞭解 Glass 的幾個基本交互元素,下面將一一介紹。
Timeline
Timeline(時間軸)是 Glass 上最最基本的交互元素,每一張卡片都表明一個信息。用戶能夠經過 Glass 的眼鏡腿先後翻閱每一張卡片。
Timeline 結構
整個 Timeline 大體上是這麼分佈的:用戶首先看到的是一個時鐘主屏幕,全部操做都從這裏開始;左邊是正在發生的事情,好比正在運行的 GDK 應用,好比用戶固定了的卡片;右邊是過去的事情,相似一個瀑布流,舊的消息會被一直日後推,直到消失不見。
卡片組
而對於具備相關性的卡片,好比一組電子郵件會話,則會展現爲一個卡片組。用戶能夠展開它看到這個郵件主題的對話歷史。
關於卡片的設計,谷歌官方對此給出了四點規範:
在你須要的時候,它就在那裏;在你不須要的時候,你不會留意到它存在。Glassware 作的應當是你的我的助手,而不是掌控你的行爲。
Glassware 提供的信息應當是儘可能簡潔的,不須要用戶過多注意力去提取信息。因此,說重點,不要一大堆廢話。
所謂以人爲本,就是你只須要不多的交互,就能夠達到目的。一個最典型的例子是,有妹紙發來短信,你只須要「ok glass, reply」,當你說完你的回覆內容後,Glass 自動幫你將信息發送出去。整個過程甚至不須要動手,不須要點來點去各類菜單操做。
深夜某個時候,哐噹一聲。。。嗯,某些公司的癖好,你們懂的。
Menu Items
另外一個重要的交互元素是 Menu(菜單)。每一張卡片均可以帶有一個或多個菜單項,用戶翻到這張卡片時,點擊眼鏡腿,就會看到這張卡片的操做菜單,每個菜單項都表明着特定的功能。開發者能夠本身定義每張卡片應當出現什麼菜單項。幾個經常使用的菜單項有:
除此以外 Glass 自己還支持不少菜單指令,甚至還能由開發者本身定義菜單項,或者改變原有菜單項的顯示文字。
前面提到,使用 Mirror API 開發的應用並不能直接訪問 Glass 設備自己,所以若是須要對用戶的操做做出迴應,就須要用到 Subscription 機制。
Subscription 機制的原理是,Glassware 向 Mirror API 註冊一個 HTTPS 回調地址;當用戶產生了特定動做(好比,向你的 Glassware 分享照片),Mirror API 就會向你的 HTTPS 地址發出一個 POST 請求;Glassware 接收到這個 POST 請求後,就能夠從請求體中提取出必要的信息。
Glass 的全部操做都經過主屏幕開始。用戶能夠經過點擊觸摸板,或者使用「ok glass...」語音指令啓動主菜單看到這些指令。
除了 Glass 自己提供的「Take a picture」、「Record a video」等等系統指令外,Glass 還向 Glassware 提供了不下 19 種語音指令,好比「Post an update」、「Take a note」等等。固然,還有 17 條指令直到目前還沒出如今官方開發文檔中,我就不說啦(沒去 GDG 現場的朋友吃虧啦哈哈哈)。
Share to somebody
Contacts 在 Glass 上是一個比較開放的概念。它既能夠是一個真實的人,也能夠是一個虛構的概念。它的存在是做爲一個接受指令的東西:
Glass 同時也是一款很適合 LBS 的設備。然而 Glass 自己並不自帶 GPS 模塊,而是須要依賴所配對的手機的 GPS 進行定位。經過將 GPS、蜂窩數據等耗電模塊轉嫁給手機,也是 Glass 達到節電、輕便設計的一個手段。
Glass 與手機配對後,Mirror API 便會使用手機的地理位置信息(衆所周知,只要你的 Android 手機開放了相關的權限,便會定時向 Google 上報地理位置)。經過相應的接口,Glassware 能夠獲取到 Glass 最近一次上報的地理位置。此外,經過 Subscription 機制,Glassware 也能夠及時得知用戶的地理位置變動,從而做出相應的迴應。
新鮮滾熱辣,上個星期剛剛發佈的 GDK。此次 GDG 聚會我也順便簡單介紹了一下。
Android SDK and GDK
GDK 自己基於 Android SDK (API 15),並在此基礎上加入了一些 Glass 纔有的特性。相較於 Mirror API,使用 GDK 開發的 Glassware 是一個 APK 格式的 Android 應用,運行在 Glass 本地,而且可以訪問 Glass 自己的一些底層傳感器(好比指南針、陀螺儀等)。
這裏主要介紹一些 Glass 特有的概念。
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 的示例,有興趣的朋友能夠參考一下:
此外我本身也正在嘗試移植一個 VNC 服務器的 Android 實現,原本打算 GDG 現場用來在大屏幕展現 Glass 的界面的,結果現場的 WiFi 不給力呀……這東西如今也被我改得各類亂(暈)
Immersion
Live Card 本質上仍是讓用戶與 Timeline 交互,Glassware 只做爲數據提供。而 Immersion,顧名思義,直接跳出 Timeline 進入到你的 APK 中,而後就能夠徹底掌控用戶的交互。
一些乾貨:
歡迎各位對 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.
本文內容主要參考官方文檔總結而成,部分圖片來自官方文檔。轉載請註明出處。