根據研究機構IDC統計,2015年智能可穿戴技術(shù)市場(chǎng)將成長(cháng)至2014年的5倍之多,產(chǎn)品出貨量預計超過(guò)2500萬(wàn)單位,且絕大部分都將采用Bluetooth? Smart為用戶(hù)提供無(wú)縫、簡(jiǎn)單易行的連接體驗。未來(lái)可穿戴設備、智能手機和基于云的互聯(lián)網(wǎng)服務(wù)將更好地協(xié)同工作,再也不需用戶(hù)采取任何復雜的操作或花時(shí)間了解這些專(zhuān)業(yè)知識。 可穿戴技術(shù)正在騰飛,應用形式日新月異,從智能手表到各式運動(dòng)手環(huán),甚至還有智能假發(fā)!而B(niǎo)luetooth Smart就在這一切變革的中心。文章講述了打造Android Wear體驗所涉及的標準和延展安卓通知等基礎問(wèn)題。并繼續和大家討論如何創(chuàng )建在可穿戴設備上獨立運行的APP。 Android Wear 2014年,谷歌推出了新的Android Wear版本,這是面向可穿戴設備的安卓操作系統。一般來(lái)說(shuō),像Moto 360 智能手表這樣的Android Wear設備都需要與安卓智能手機協(xié)同工作,而Android Wear支持可穿戴設備與其他運行完整安卓系統的設備進(jìn)行雙向通信。 Bluetooth Smart的架構和角色 在 Android Wear的世界中,設備就相當于節點(diǎn),這些節點(diǎn)各自具備不同的功能,并被連接到可穿戴的網(wǎng)絡(luò )中。一般來(lái)說(shuō),智能手機相當于可穿戴網(wǎng)絡(luò )的中樞,與其他類(lèi)型如智能手表的節點(diǎn)相連接。節點(diǎn)與節點(diǎn)之間就是通過(guò)Bluetooth Smart進(jìn)行通信的,但Android Wear開(kāi)發(fā)者其實(shí)并不需要全盤(pán)地了解Bluetooth Smart。通過(guò)Android Wear的API就可以輕松加愉快地實(shí)現藍牙技術(shù)的功能! 也就是說(shuō),Android Wear允許開(kāi)發(fā)者直接使用如android.bluetooth.le.BluetoothLeScanner這樣的標準Bluetooth Smart API。這樣,可穿戴設備就可以脫離手機的輔助,直接與其他Bluetooth Smart設備互動(dòng)了。 可穿戴設備要比智能手機中樞的功能少得多,因此可穿戴設備通常要和智能手機協(xié)同工作,將一些高難的計算工作交由智能手機處理。在本文中我們將重點(diǎn)關(guān)注這樣的使用場(chǎng)景。 圖1 – 架構 開(kāi)發(fā)可穿戴博物館導覽APP的三大方法 有三種方法可以將之前介紹過(guò)的智能手機博物館導覽APP拓展到Moto 360智能手表上: 1. 使用標準Android Notifications 2. 使用面向Android Wear設備的Extend Notifications 3. 開(kāi)發(fā)在可穿戴設備上運行的Android WearAPP 本文先為大家介紹前兩個(gè)基于通知的方法,再向大家介紹Android Wear APP的開(kāi)發(fā)。 標準通知(Standard Notifications) 告訴你一個(gè)好消息:安卓智能手機發(fā)出的任何通知都會(huì )被自動(dòng)發(fā)送至相應的、已連接的可穿戴設備上。因此,如果已經(jīng)在安卓智能手機APP上使用了通知,那么即使不再另外編寫(xiě)專(zhuān)門(mén)的代碼,APP通知在可穿戴設備上顯示也不成問(wèn)題,酷吧! 圖2 –Moto 360上GetYourBeacOn應用的標準通知 可穿戴設備的擴展通知 安卓API提供一些方法為可穿戴設備定制信息,而不是單純地把可穿戴設備作為智能手機通知提示的顯示屏。例如,我們可以利用特殊的文本樣式,設置通知的背景圖像,建立多重頁(yè)面讓用戶(hù)可以通過(guò)劃屏查看通知詳情,還可以在通知中添加一些操作,增加可穿戴設備的互動(dòng)性。 我決定為用戶(hù)在A(yíng)ndroid Wear設備上提供多個(gè)信息頁(yè)面,再添加一些互動(dòng),讓用戶(hù)可以對特定的展覽內容做出“喜歡”或“不喜歡”的反饋。這不難實(shí)現,只要借助一個(gè)名為WearableExtender的工具即可。我們來(lái)簡(jiǎn)要地看一下代碼吧。 我們先來(lái)創(chuàng )建三個(gè)包括主要的展覽信息頁(yè)面,為讓使用者更容易在可穿戴設備上閱讀信息,我們可以使用文字形式呈現。 圖3 – 創(chuàng )建通知頁(yè)面 接下來(lái)我們需要創(chuàng )建Action物件,以回應用戶(hù)對互動(dòng)選項“喜歡”和“不喜歡”的選擇。Action與頁(yè)面類(lèi)似,但需要有一個(gè)與之相關(guān)聯(lián)的Intent包括在PendingIntent對象里。安卓系統里,Intent是即將執行的操作,而PendingIntent是可以交由另一個(gè)應用執行的Intent。在這里的情況下,前述“另一個(gè)應用”指的就是博物館導覽APP,我規定PendingIntent需要啟動(dòng)一個(gè)名為NotificationActionHandler的Activity。 圖4 – 創(chuàng )建操作,為通知增加互動(dòng)功能 最后,我們再創(chuàng )建一個(gè)包括附加頁(yè)面和操作的WearableExtender,再建立一個(gè)包含它的通知,再加上代表一些基本設置的數據和我們的第一個(gè)通知頁(yè)面。觸發(fā)通知,就成了!可穿戴設備會(huì )收到一個(gè)多頁(yè)的、互動(dòng)的通知。 圖5 – 為通知添加可穿戴拓展 通知就會(huì )像下圖的形式顯示在智能手表屏幕上 圖6 – 可穿戴設備上的拓展互動(dòng)通知 當用戶(hù)選擇“喜歡”或“不喜歡”的操作后,NotificationActionHandlerActivity就會(huì )在智能手機上啟動(dòng),顯示以下屏幕之一: 圖7 – 智能手機APP對可穿戴設備上選定的操作的回應 你看,單單利用安卓通知,就能實(shí)現這么多功能! Android Wear還是很容易上手的。通知(Notification)對于大多數安卓應用開(kāi)發(fā)者都不陌生,Bluetooth Smart會(huì )默默地在幕后幫你搞定智能手機和可穿戴設備之間的通訊,而不需要開(kāi)發(fā)者花太多時(shí)間專(zhuān)門(mén)了解它。 Android Wear APP 你也許會(huì )想,既然拓展通知就能實(shí)現很多功能,為什么還要在可穿戴設備上開(kāi)發(fā)APP呢?我們不妨就從這個(gè)問(wèn)題出發(fā)。通過(guò)開(kāi)發(fā)Android WearAPP,我們可以更好地控制用戶(hù)界面,還能像智能手機一樣創(chuàng )建自定義的UI布局。此外,還能實(shí)現雙向設備通信,讓可穿戴設備和智能手機之間能夠相互發(fā)送信息。 Android Wear APP能夠脫離智能手機APP獨立運行,但開(kāi)發(fā)者需要注意第一篇中提到的智能手機和可穿戴設備的相對能力差異,利用更強大的智能手機處理需要多方資源支持的復雜操作。舉例來(lái)說(shuō),持續掃描Beacon就需要比較多的資源,因此決定把這一工作交給智能手機處理。探測到Beacon后,手機會(huì )將相關(guān)的展品信息發(fā)送給智能手表上的Android Wear APP,用戶(hù)就可以在智能手表屏幕上瀏覽這些信息了。 Android Wear API Google Play Services 庫提供了以下主要的Android Wear API,在可穿戴博物館導覽APP中都有用到。 DataApi 這一API能夠將所有與Android Wear連接的節點(diǎn)自動(dòng)進(jìn)行數據同步,在博物館導覽APP中指的就是智能手機和智能手表之間。 一般通過(guò)PutDataRequest類(lèi)創(chuàng )建DataItem對象,制定特定路徑,以確認通過(guò)同步過(guò)程接收的節點(diǎn)數據類(lèi)型。然后只需要調用Wearable.DataApi.putDataItem,將數據交給API同步。 節點(diǎn)使用DataListener接口,通過(guò)onDataChanged方法接收同步的數據。 MessageApi MessageApi讓開(kāi)發(fā)者能夠從一個(gè)節點(diǎn)向另一個(gè)節點(diǎn)發(fā)送字節數組。MessageApi的使用通常作為一種遠程過(guò)程調用(Remote Procedure Call,簡(jiǎn)稱(chēng)RPC)機制。Capability API可用來(lái)發(fā)現能夠理解并處理特定類(lèi)型信息的節點(diǎn)。調用Wearable.MessageApi.sendMessage在藍牙連接中發(fā)送信息,實(shí)施了MessageListener 界面的接收節點(diǎn)即會(huì )通過(guò)onMessageReceived方法被調用。 CapabilityApi APP中可以在名為wear.xml的源文件中注冊處理特定類(lèi)型信息的功能!肮δ堋笔怯勺址刀x的,字符串值是開(kāi)發(fā)者創(chuàng )建并通過(guò)Capability API引用。下圖是小編為博物館導覽智能手機APP創(chuàng )建的wear.xml文件。 圖8 – 在Wear中聲明能力 NodeApi 這一API將會(huì )在可穿戴網(wǎng)絡(luò )中提供互聯(lián)節點(diǎn)訪(fǎng)問(wèn)和相關(guān)信息。 文章后面將提到這些API的例子。 Android Wear 博物館導覽用戶(hù)界面(User Interface, UI) 此處需要一個(gè)和第一節中一樣使用延展通知創(chuàng )建的多頁(yè)面、互動(dòng)UI。GridViewPager類(lèi)為此提供了最佳的基礎。當靠近展品時(shí),一共需要展示三個(gè)頁(yè)面:應用標題頁(yè)、帶有“喜歡”反饋按鈕的展品名稱(chēng)頁(yè)、展品信息頁(yè)。APP完成后的截屏如下圖: 圖9 – APP完成后的截屏 如果附近沒(méi)有Beacon,可穿戴APP就只顯示標題頁(yè),而無(wú)法進(jìn)入展品信息頁(yè)。如果智能手機APP探測到了附近的Beacon,則會(huì )立即向可穿戴APP發(fā)送展品照片和簡(jiǎn)介,并展示展品信息頁(yè)。 發(fā)送展品信息至可穿戴設備 小編使用數據層API從智能手機向可穿戴設備傳輸展品圖像和信息。在發(fā)送端(智能手機APP),使用Asset對象形成圖像容器,再使用PutDataMapRequest項啟動(dòng)智能手表同步。然后使用Google Play可穿戴DataApi啟動(dòng)智能手表同步。這里需要注意,數據PutDataRequest中包含一個(gè)時(shí)間戳。因為DataApi會(huì )緩沖數據,但如果較上次同步事件之后沒(méi)有變化則不需要進(jìn)行數據傳輸。 圖10 – 智能手機APP使用數據層API 向可穿戴設備發(fā)送數據 在A(yíng)ndroid Wear APP中實(shí)施DataApi.DataListener界面,處理onDataChanged方法中的數據同步事件。 圖11– 使用Capability API 搞定“喜歡”按鈕 讓可穿戴APP在用戶(hù)按下“喜歡”按鈕之后立即通知智能手機APP,并使用Message API來(lái)完成這一步。此外,還使用Capability API來(lái)確保信息能夠選對智能手機節點(diǎn)。 圖12 – 使用Capability API 當用戶(hù)按下“喜歡”的按鈕時(shí),會(huì )發(fā)送一個(gè)包含了路徑的信息,這個(gè)信息代表“將此事件作為“按下喜歡按鍵”處理”,同時(shí)還包含了這個(gè)展品的名稱(chēng)等信息,這個(gè)信息由可穿戴APP發(fā)送到智能手機APP。 圖13 – 通過(guò)信息API從可穿戴設備向智能手機發(fā)送信息 智能手機APP中的MessageApi.MessageListener界面通過(guò)調用onMessageReceived 方法接收信息。 圖14 – 智能手機APP從可穿戴設備APP上接收信息 總結 可穿戴網(wǎng)絡(luò )中的Android Wear API加上Bluetooth Smart的節點(diǎn)間低功耗無(wú)線(xiàn)傳輸,Android Wear其樂(lè )無(wú)窮! |