使用Microsoft Band SDK枚举和管理磁贴

导入命名空间

Visual Basic.NET代码:

Imports Microsoft.Band
Imports Microsoft.Band.Tiles
Imports Microsoft.Band.Admin
Imports Microsoft.Band.Personalization

通用变量

通过Microsoft.Band.Admin.ICargoClient类型的变量BandClient,表示一个已经连接的Microsoft Band对象。

该对象通过BandConnectionManager模块封装。

Imports Microsoft.Band
Imports Microsoft.Band.Tiles
Imports Microsoft.Band.Admin
Imports Microsoft.Band.Personalization
Module BandConnectionManager
    Public BandClient As ICargoClient
    Public BandClientLimited As IBandClient
    Public CurrentBandClass As BandClass = BandClass.Unknown
End Module

全局变量

全局变量定义如下:

Public BandDefaultTiles As New List(Of AdminBandTile) '默认磁贴池(即设备所有可用的磁贴)的列表
Public BandDefaultTilesNameList As New List(Of String) '默认磁贴池(即设备所有可用的磁贴)的名字的列表

Public BandAvailableTiles As New List(Of AdminBandTile) '可添加到设备主界面的磁贴的列表
Public BandAvailableTilesNameList As New List(Of String) '可添加到设备主界面的磁贴名称的列表

Public UserEditedTiles As New List(Of AdminBandTile) '设备主界面的磁贴的列表
Public UserEditedTilesNameList As New List(Of String) '设备主界面的磁贴的名称的列表

Public BandCurrentStartStrip As StartStrip '表示设备当前的主界面磁贴布局

获取设备已钉选和可用的磁贴

GetBandTileInfo()方法计算已位于主界面的磁贴和可用的磁贴。GetBandTileInfo()方法会调用GenerateAvailableTiles()IsTilePinned()函数来计算一些参数。

其中,BandClient.GetStartStripNoImages()用于获取设备已钉选的磁贴,BandClient.GetDefaultTilesNoImages()用于获取默认磁贴池。

Public Function IsTilePinned(TileToTest As AdminBandTile) As Boolean
    For Each TileItem In UserEditedTiles
        If TileToTest.Id.ToString = TileItem.Id.ToString Then
            Return True
        End If
    Next
    Return False
End Function

Public Sub GetBandTileInfo()
    BandDefaultTiles.Clear()
    BandDefaultTilesNameList.Clear()
    BandAvailableTiles.Clear()
    BandAvailableTilesNameList.Clear()
    UserEditedTiles.Clear()
    UserEditedTilesNameList.Clear()

    BandDefaultTiles = BandClient.GetDefaultTilesNoImages()
    For Each BandTileItem In BandDefaultTiles
        BandDefaultTilesNameList.Add(BandTileItem.Name & " [GUID=" & BandTileItem.Id.ToString & "]")
    Next

    BandCurrentStartStrip = BandClient.GetStartStripNoImages()
    For Each BandTileItem In BandCurrentStartStrip
        UserEditedTiles.Add(BandTileItem)
        UserEditedTilesNameList.Add(BandTileItem.Name & " [GUID=" & BandTileItem.Id.ToString & "]")
    Next

    GenerateAvailableTiles()

End Sub

Public Sub GenerateAvailableTiles()
    BandAvailableTiles.Clear()
    BandAvailableTilesNameList.Clear()

    For Each BandTileItem In BandDefaultTiles
        If Not IsTilePinned(BandTileItem) Then
            BandAvailableTiles.Add(BandTileItem)
            BandAvailableTilesNameList.Add(BandTileItem.Name & " [GUID=" & BandTileItem.Id.ToString & "]")
        End If
    Next
End Sub

保存磁贴布局

SetBandTileInfo()方法调用BandClient.SetStartStrip()方法,同步地保存磁贴布局。本方法接受一个StartStrip类型的参数,表示要设置的主界面磁贴布局。StartStrip可以从List(Of AdminBandTile)进行构造。

BandClient.SetStartStrip()方法提供异步版本BandClient.SetStartStripAsync()

Public Sub SetBandTileInfo()
    BandCurrentStartStrip = New StartStrip(UserEditedTiles)
    BandClient.SetStartStrip(BandCurrentStartStrip)
End Sub

模块代码

使用模块BandTileManager封装上述变量与方法。

Imports Microsoft.Band
Imports Microsoft.Band.Tiles
Imports Microsoft.Band.Admin
Imports Microsoft.Band.Personalization
Module BandTileManager
    Public BandDefaultTiles As New List(Of AdminBandTile)
    Public BandDefaultTilesNameList As New List(Of String)

    Public BandAvailableTiles As New List(Of AdminBandTile)
    Public BandAvailableTilesNameList As New List(Of String)

    Public UserEditedTiles As New List(Of AdminBandTile)
    Public UserEditedTilesNameList As New List(Of String)

    Public BandCurrentStartStrip As StartStrip

    Public Function IsTilePinned(TileToTest As AdminBandTile) As Boolean
        For Each TileItem In UserEditedTiles
            If TileToTest.Id.ToString = TileItem.Id.ToString Then
                Return True
            End If
        Next
        Return False
    End Function

    Public Sub GetBandTileInfo()
        BandDefaultTiles.Clear()
        BandDefaultTilesNameList.Clear()
        BandAvailableTiles.Clear()
        BandAvailableTilesNameList.Clear()
        UserEditedTiles.Clear()
        UserEditedTilesNameList.Clear()

        BandDefaultTiles = BandClient.GetDefaultTilesNoImages()
        For Each BandTileItem In BandDefaultTiles
            BandDefaultTilesNameList.Add(BandTileItem.Name & " [GUID=" & BandTileItem.Id.ToString & "]")
        Next

        BandCurrentStartStrip = BandClient.GetStartStripNoImages()
        For Each BandTileItem In BandCurrentStartStrip
            UserEditedTiles.Add(BandTileItem)
            UserEditedTilesNameList.Add(BandTileItem.Name & " [GUID=" & BandTileItem.Id.ToString & "]")
        Next

        GenerateAvailableTiles()

    End Sub

    Public Sub GenerateAvailableTiles()
        BandAvailableTiles.Clear()
        BandAvailableTilesNameList.Clear()

        For Each BandTileItem In BandDefaultTiles
            If Not IsTilePinned(BandTileItem) Then
                BandAvailableTiles.Add(BandTileItem)
                BandAvailableTilesNameList.Add(BandTileItem.Name & " [GUID=" & BandTileItem.Id.ToString & "]")
            End If
        Next
    End Sub
    Public Sub SetBandTileInfo()
        BandCurrentStartStrip = New StartStrip(UserEditedTiles)
        BandClient.SetStartStrip(BandCurrentStartStrip)
    End Sub
End Module

附注

一些特殊的磁贴,例如Starbucks、Facebook Messenger等,不会被包括在默认磁贴池中,但是它们拥有特定的GUID(通过System.Guid对象表示),可以通过硬编码的方法指定这些磁贴。本文没有实现这个方法。

it
除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License