一、准备工作
去年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。。)