一、准備工作
去年10月,微軟發布了微軟手環,並在幾個月后發布了相應平台的SDK並在持續更新中。今天,我們就來說說在Windows Phone當中進行MS Band應用的開發。
所謂Band開發,你寫的App其實在根本上是運行在你手機上的,Band只用於呈現信息、采集信息和顯示通知。當然,Band上強大的傳感器也可以幫助你構建更牛逼的健康類應用。我就拋磚引玉地來給大家簡單說說Band開發的所需的基礎知識。
首先,創建一個WP8.1(RT)的空白項目,下載並引用Band SDK(可以在Nuget上獲取)。
打開項目中的Package.appxmanifest文件,在“功能”選項卡(Capabilities)中勾選 “臨近”(Proximity)。
然后右鍵Package.appxmanifest,選擇查看代碼,在 <Capabilities> 標簽內下加入如下代碼:
<m2:DeviceCapability Name="bluetooth.rfcomm"> <m2:Device Id="any"> <!-- Used by the Microsoft Band SDK --> <m2:Function Type="serviceId:A502CA9A-2BA5-413C-A4E0-13804E47B38F" /> <!-- Used by the Microsoft Band SDK --> <m2:Function Type="serviceId:C742E1A2-6320-5ABC-9643-D206C677E580" /> </m2:Device> </m2:DeviceCapability>
二、獲取設備列表
現在,准備工作就做得差不多了。可以正式開始寫代碼了。先在MainPage中放一個ListBox,名字就叫DevicesListBox,再弄一個Button。我們要做的就是在按下Button之后,顯示已經配對或連接的手環設備。
進入MainPage.xaml.cs,using一下Microsoft.Band這個命名空間。給Button的Click處理方法加入async關鍵字使其成為異步方法,因為我們一會要異步獲取手環列表。在Button_Click中加入下列代碼。
IBandInfo[] pairedBands = await BandClientManager.Instance.GetBandsAsync();
這樣,我們就得到了一個包含已配對或連接的手環的列表。這個IBandInfo接口提供了兩個常用的屬性:Name和ConnectionType,分別用於獲取手環的名稱和連接方式(一般是藍牙)
所以,比如我們想把pairedBands列表中手環的名稱依次顯示在DevicesListBox列表中,只需用foreach遍歷每一項然后將Name屬性添加到DevicesListBox中即可,如下。:
foreach (var b in pairedBands) { DevicesListBox.Items.Add(b.Name); }
三、連接手環
使用BandClientManager.Instance.ConnectAsync(IBandInfo bandInfo);方法來連接到指定的Band設備。
具體實現如下:
using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[DevicesListBox.SelectedIndex])) { //告知用戶連接成功 }
因為IBandClient實現了IDisposable接口,所以可以用using(){}的形式,便於釋放資源。
而為了應對在連接過程中可能出現的異常,最好使用try-catch來處理異常並告知用戶。
四、獲取信息
在IBandClient中有兩個常用的方法,用於獲取用戶連接的手環的軟硬件信息。
分別是:
GetFirmwareVersionAsync(); 獲取手環的固件版本
GetHardwareVersionAsync(); 獲取手環的硬件版本
兩個方法都返回 string
五、總結
今天在這篇文章里簡單地介紹了一下微軟手環應用的開發,事實上還只是連接,還沒有到具體的開發這一步,在下一篇文章中,我應該會講一下在Band上進行和動態磁貼有關的操作。之后還會講如何在手環上創建UI之類的。
但是現在Band在中國依然是不溫不火的狀態,主要是由於沒有在中國發售和不支持中文的緣故。最近也有各種說法說微軟正在研發Band 2代,應該會彌補1代的不足,而對於開發者來說,2代的開發我預感不會有特別大的區別。所以,現在有Band的開發者可以學習手環應用的開發,而還沒有Band的開發者,也可以簡略了解一下,為將來2代手環的開發打一些基礎。萬一Band 2能比Apple Watch更成功呢?(盡管不太可能2333。。)