Passa ai contenuti principali

Microsoft Band SDK Preview - ”Hello Band”

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.

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:

SNAGHTML19b468f

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.

image

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).

SNAGHTMLedfbd

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>

 

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.

image

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).
La seguente figura riporta la struttura delle interfacce IBandInfo e IBandClient:

image
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

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

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:

image
  • 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.
Vedremo ogni singola interfaccia in altrettanti post.
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

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.

Commenti

Post popolari in questo blog

MVP Reconnect …… ovvero quando entri nella “famigghia” resti sempre nella “famigghia”!!!

Ma di che “famigghia” stiamo parlando!!!!

Fermi tutti, non si tratta di robe strane o sette segrete o affari malavitosi….stiamo parlando della grande famiglia dei Microsoft MVP.

Per chi non sapesse cosa sono i Microsoft MVP, vi consiglio di fare un giro sul sito ufficiale del programma (link), ma, volendolo spiegare in pochisime parole, si tratta di un riconoscimento che Microsoft da a persone che si distinguono per il loro impegno, aiutando gli altri ad ottenere il massimo grazie alle tecnologie Microsoft. Si tratta di persone, non dipendenti Microsoft, che mettono la loro passione, il loro tempo, la loro buona volontà per la divulgazione e la condivisione della conoscenza. Non necessariamente (come qualcuno erroneamente sostiene, evidentemente non conoscendo le basi del programma) si tratta di professionisti nel termine letterale del termine ma si tratta comunque di un gruppo di persone che sacrifica un pò del suo tempo (e, a volte, vi assicuro neanche pò!!!) per la sua passione.

Pe…

Template di progetto per sviluppare applicazioni WPF con Intel® RealSense™

E’ disponibile, nella gallery di Visual Studio, la prima versione del mio template di progetto per applicazioni WPF scritte in C# che permette di realizzare applicazioni con l’SDK di Intel® RealSense™.Il template si può scaricare direttamente all’interno Visual Studio utilizzando il tool “Extensions and Updates”oppure all’indirizzo https://visualstudiogallery.msdn.microsoft.com/1c36ecfd-8c00-4aee-b20c-a1726ab6424dIl template esegue le seguenti operazioni per voi:Aggiunge la reference all’assembly libpxcclr.cs.dll (nelle due distinte versioni per x86 e x64);Aggiunge lo script di post build per copiare la libreria libpxccpp2c.dll dalla cartella dell’SDK alla cartella bin del vostro progetto.Una volta creato il progetto dovete rimuovere la configurazione di compilazione AnyCPU (che non ha più senso) dalla vostra solution e sarete pronti per sviluppare con Intel® RealSense™.Ovviamente dovete installare l’SDK che potete scaricare all’indirizzo https://software.intel.com/en-us/intel-realsen…