In questo post cercheremo di avere un primo contatto con il nuovo SDK per Microsoft Band.
In particolare cercheremo di capire come è strutturato lo stesso e quali sono le classi fondamentali per iniziare a realizzare le nostre app che interfacciano lo smartwatch. Per finire vedremo come connettersi all’orologio e come ricavare alcune informazioni dallo stesso.
Prima di cominciare vi ricordo che avete bisogno di un Band fisico per poter eseguire delle prove e che il Band deve essere in pairing e connesso al device su cui state facendo i test.
L’SDK del Band è, infatti, distribuito attraverso NuGet e, di fatto, si tratta di una serie di dll (3 per l’esattezza) e di una trasformazione del manifest dell’applicazione. Al momento della scrittura di questo post la versione in distribuzione è la 1.3.10219 in prerelease (includete le prerelease nella tendina del Manager NuGet Packages altrimenti non la vedrete).
Partiamo dalle dll che vengono referenziate.
La Microsoft.Band contiene le interfacce e i tipi comuni ad entrambe le piattaforme. A tal proposito è opportuno evidenziare (e lo faremo anche in seguito) il fatto che tutte le funzionalità vengono erogate tramite interfacce. Questo garantisce un ottimo disaccoppiamento e, in linea teorica, fa ben sperare per un simulatore/emulatore che permetterebbe a coloro che non hanno un Band fisico di poter sviluppare e testare le proprie app.
La prima volta che agganciamo l’SDK tramite NuGet, il package dovrebbe automaticamente abilitare le opportune capabilities. Se nella solution avete due progetti su cui volete utilizzare il Band SDK, il secondo progetto che referenzierà l’SDK tramite NuGet non avrà le capabilities automaticamente abilitate.
In ogni caso, le capabilities essenziali sono la Proximity (impostabile tramite designer dell’app manifest).
e i servizi Bluetooth LE abilitabili aprendo il file XML dell’App Manifest e aggiungendo:
La classe principale per accedere al Band, è la BandClientManager.
BandClientManager è un singleton che aderisce all’interfaccia IBandClientManager. Possiamo accedere ad un’istanza di quest’ultima interfaccia utilizzando la proprietà statica Instance.
L’interfaccia IBandClientManager espone due metodi asincroni:
Parlando con il codice, se vogliamo ottenere l’elenco dei Band collegati ci basta scrivere:
Ogni istanza di IBandInfo espone il nome del Band e la tipologia di connessione che lo stesso ha con il device che stiamo utilizzando (attualmente Bluetooth o Usb).
Osserviamo che, se non abbiamo band connessi, l’elenco ritornato dal metodo GetBandsAsync è un array con zero elementi. In linea teorica, quindi, questo metodo non dovrebbe sollevare eccezioni di alcun tipo.
Utilizzando l’istanza di IBandInfo, possiamo tentare di eseguire la connessione utilizzando il metodo ConnectAsync
Se la connessione va a buon fine, otteniamo un’istanza di IBandClient.
IBandClient espone due metodi che permettono di recuperare la versione del firmware e dell’hardware del Band e 4 proprietà che ci permettono di accedere alle vere e proprie funzionalità del Band:
Nel frattempo possiamo utilizzare i metodi GetFirmwareVersionAsync e GetHardwareVersionAsync della IBandClient per recuperare le versioni del firmware e dell’hardware del Band connesso.
I due metodi tornano semplicemente delle stringhe (al netto dell’async, ovviamente) che contengono le versioni cercate.
Al seguente link potete scaricare l’esempio del post.
Nel prossimo post cercheremo di capire come interagire con i sensori del Band, quindi non ve lo potete perdere.
In particolare cercheremo di capire come è strutturato lo stesso e quali sono le classi fondamentali per iniziare a realizzare le nostre app che interfacciano lo smartwatch. Per finire vedremo come connettersi all’orologio e come ricavare alcune informazioni dallo stesso.
Prima di cominciare vi ricordo che avete bisogno di un Band fisico per poter eseguire delle prove e che il Band deve essere in pairing e connesso al device su cui state facendo i test.
Cominciare da zero
Per cominciare, creiamo un nuovo progetto per Windows Phone 8.1 (WinRT) e aggiungiamo il riferimento all’SDK del Band utilizzando NuGet come mostrato nella seguente figura:L’SDK del Band è, infatti, distribuito attraverso NuGet e, di fatto, si tratta di una serie di dll (3 per l’esattezza) e di una trasformazione del manifest dell’applicazione. Al momento della scrittura di questo post la versione in distribuzione è la 1.3.10219 in prerelease (includete le prerelease nella tendina del Manager NuGet Packages altrimenti non la vedrete).
Partiamo dalle dll che vengono referenziate.
La Microsoft.Band contiene le interfacce e i tipi comuni ad entrambe le piattaforme. A tal proposito è opportuno evidenziare (e lo faremo anche in seguito) il fatto che tutte le funzionalità vengono erogate tramite interfacce. Questo garantisce un ottimo disaccoppiamento e, in linea teorica, fa ben sperare per un simulatore/emulatore che permetterebbe a coloro che non hanno un Band fisico di poter sviluppare e testare le proprie app.
Capabilities
Il Band è un dispositivo Bluetooth LE, quindi, è necessario definire le capabilities opportune per permettere alla nostra app di utilizzare ii servizi Bluetooth LE (che, sfortunatamente, non aderiscono ad un profilo standard).La prima volta che agganciamo l’SDK tramite NuGet, il package dovrebbe automaticamente abilitare le opportune capabilities. Se nella solution avete due progetti su cui volete utilizzare il Band SDK, il secondo progetto che referenzierà l’SDK tramite NuGet non avrà le capabilities automaticamente abilitate.
In ogni caso, le capabilities essenziali sono la Proximity (impostabile tramite designer dell’app manifest).
e i servizi Bluetooth LE abilitabili aprendo il file XML dell’App Manifest e aggiungendo:
<Capabilities>
<Capability Name="internetClientServer" />
<DeviceCapability Name="proximity" />
<DeviceCapability Name="bluetooth.rfcomm" xmlns="http://schemas.microsoft.com/appx/2013/manifest">
<Device Id="any">
<!-- Used by the Microsoft Band SDK Preview -->
<Function Type="serviceId:A502CA9A-2BA5-413C-A4E0-13804E47B38F" />
<!-- Used by the Microsoft Band SDK Preview -->
<Function Type="serviceId:C742E1A2-6320-5ABC-9643-D206C677E580" />
</Device>
</DeviceCapability>
</Capabilities>
<Capability Name="internetClientServer" />
<DeviceCapability Name="proximity" />
<DeviceCapability Name="bluetooth.rfcomm" xmlns="http://schemas.microsoft.com/appx/2013/manifest">
<Device Id="any">
<!-- Used by the Microsoft Band SDK Preview -->
<Function Type="serviceId:A502CA9A-2BA5-413C-A4E0-13804E47B38F" />
<!-- Used by the Microsoft Band SDK Preview -->
<Function Type="serviceId:C742E1A2-6320-5ABC-9643-D206C677E580" />
</Device>
</DeviceCapability>
</Capabilities>
La classe BandClientManager
Una volta definite ed impostate opportunamente le capabilities, possiamo cominciare a lavorare sul nostro Band.La classe principale per accedere al Band, è la BandClientManager.
BandClientManager è un singleton che aderisce all’interfaccia IBandClientManager. Possiamo accedere ad un’istanza di quest’ultima interfaccia utilizzando la proprietà statica Instance.
L’interfaccia IBandClientManager espone due metodi asincroni:
- GetBandsAsync: permette di ottenere l’array di oggetti IBandInfo che forniscono informazioni sui Band connessi;
- ConnectAsync: permette il collegamento ad uno specifico Band (identificato da un’istanza di IBandInfo) e restituisce, in caso di successo, un’istanza di IBandClient).
Parlando con il codice, se vogliamo ottenere l’elenco dei Band collegati ci basta scrivere:
Dim bands = Await BandClientManager.Instance.GetBandsAsync()
If bands.Any() Then
BandList.ItemsSource = bands
MessageText.Visibility = Windows.UI.Xaml.Visibility.Collapsed
Else
BandList.ItemsSource = Nothing
MessageText.Visibility = Windows.UI.Xaml.Visibility.Visible
End If
If bands.Any() Then
BandList.ItemsSource = bands
MessageText.Visibility = Windows.UI.Xaml.Visibility.Collapsed
Else
BandList.ItemsSource = Nothing
MessageText.Visibility = Windows.UI.Xaml.Visibility.Visible
End If
Ogni istanza di IBandInfo espone il nome del Band e la tipologia di connessione che lo stesso ha con il device che stiamo utilizzando (attualmente Bluetooth o Usb).
Osserviamo che, se non abbiamo band connessi, l’elenco ritornato dal metodo GetBandsAsync è un array con zero elementi. In linea teorica, quindi, questo metodo non dovrebbe sollevare eccezioni di alcun tipo.
Utilizzando l’istanza di IBandInfo, possiamo tentare di eseguire la connessione utilizzando il metodo ConnectAsync
Try
Using bandClient = Await BandClientManager.Instance.ConnectAsync(bandInfo)
'
'
'
End Using
Catch ex As BandException
End Try
Using bandClient = Await BandClientManager.Instance.ConnectAsync(bandInfo)
'
'
'
End Using
Catch ex As BandException
End Try
Se la connessione va a buon fine, otteniamo un’istanza di IBandClient.
IBandClient espone due metodi che permettono di recuperare la versione del firmware e dell’hardware del Band e 4 proprietà che ci permettono di accedere alle vere e proprie funzionalità del Band:
- NotificationManager: espone l’interfaccia tramite la quale è possibile gestire l’invio di messaggi al Band;
- PersonalizationManager: espone l’interfaccia tramite la quale è possibile personalizzare;
- SensorManager: espone l’interfaccia tramite la quale si ha accesso ai sensori presenti nel Band;
- TileManager: espone l’interfaccia tramite la quale gestire la propria tile all’interno delle tile del Band.
Nel frattempo possiamo utilizzare i metodi GetFirmwareVersionAsync e GetHardwareVersionAsync della IBandClient per recuperare le versioni del firmware e dell’hardware del Band connesso.
Try
Using bandClient = Await BandClientManager.Instance.ConnectAsync(bandInfo)
BandNameText.Text = bandInfo.Name
BandConnectionTypeText.Text = bandInfo.ConnectionType.ToString()
Dim firmTask = bandClient.GetFirmwareVersionAsync()
Dim hardTask = bandClient.GetHardwareVersionAsync()
Await Task.WhenAll(firmTask, hardTask)
BandFirmwareVersionText.Text = firmTask.Result
BandHardwareVersionText.Text = hardTask.Result
End Using
Catch ex As BandException
End Try
Using bandClient = Await BandClientManager.Instance.ConnectAsync(bandInfo)
BandNameText.Text = bandInfo.Name
BandConnectionTypeText.Text = bandInfo.ConnectionType.ToString()
Dim firmTask = bandClient.GetFirmwareVersionAsync()
Dim hardTask = bandClient.GetHardwareVersionAsync()
Await Task.WhenAll(firmTask, hardTask)
BandFirmwareVersionText.Text = firmTask.Result
BandHardwareVersionText.Text = hardTask.Result
End Using
Catch ex As BandException
End Try
I due metodi tornano semplicemente delle stringhe (al netto dell’async, ovviamente) che contengono le versioni cercate.
Al seguente link potete scaricare l’esempio del post.
Nel prossimo post cercheremo di capire come interagire con i sensori del Band, quindi non ve lo potete perdere.
Tag di Technorati: Microsoft Band SDK Preview,Microsoft Band
Commenti