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

VB.NET for Dummies: Gli Eventi

Vorrei iniziare con questo post una serie dedicata ad aspetti di VB.NET di base che possono essere utile a coloro che si avvicinano al mondo .NET e che, in genere, non vengono trattati a livello base. La serie di post non ha la pretesa di essere assolutamente esaustivi sugli argomenti che tratterò In questo primo post parleremo degli eventi. Cosa sono e a cosa servono Un evento è la “notifica” dell’accadimento di qualcosa. Quando, ad esempio, premiamo un bottone della finestra di un’applicazione, dietro le quinte, il bottone stesso “notifica” al mondo circostante che qualcuno, in quell’istante, lo ha premuto. Sta, poi, al mondo circostante preoccuparsi di “intercettare” l’evento stesso per gestirlo (tramite un gestore di evento). Attenzione a non confondere la pressione del tasto con la “notifica” della pressione del tasto: l’evento è la “notifica” dell’accadimento, non l’accadimento stesso. Ma a cosa serve tutto ciò? Utilizzare gli eventi è un modo per disaccoppiare ...

VB.NET: SplashScreen con effetto fade-in

In questo post vorrei proporvi un modo per realizzare una splash screen per le nostre applicazioni Windows Form che appare progressivamente con un effetto fade. Supponiamo di avere il nostro progetto VB.NET in una soluzione Visual Studio 2008 in cui abbiamo il sorgente della nostra applicazione Windows Form. Inseriamo una splash screen utilizzando il menù Progetto->Aggiungi Nuovo Elemento e selezionando il tipo di elemento “Schermata Iniziale” A questo punto Visual Studio creerà, automaticamente, la schermata iniziale che possiamo personalizzare graficamente come vogliamo. Per poter fare in modo che questa finestra appaia nel momento in cui avviamo l’applicazione, è necessario aprire le proprietà del progetto e impostare la maschera di avvio: In questo modo, all’avvio dell’applicazione, la schermata appare immediatamente e scompare un attimo prima della visualizzazione della finestra dell’applicazione. Possiamo far apparire la schermata iniziale con un ef...

Alla scoperta del Kinect: presentazioni e convenevoli

Oggi è arrivato un Kinect nuovo nuovo su cui cominciare a fare sperimentazione ed ho, quindi, deciso di condividere tutto ciò che scopro, le cavolate che faccio e i segreti che scopro con chi mi segue. I post che cercherò di scrivere con frequenza sono post di un neofita che si avvicina all’”Aggeggio” e che quindi sono diretti a chi nulla dell’argomento. Gli esperti troveranno noiosi e banali questi post, ma non si può aver tutto dalla vita. Per cominciare, scartato l’”Aggeggio” ho cominciato a preparare l’ambiente di sviluppo: 1) Visual Studio 2010 Ultimate (che uso normalmente ma che non è necessario in quanto si può sviluppare tranquillamente con la express edition); 2) Kinect SDK, scaricabile all’indirizzo http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx 3) DirectX Software Development Kit scaricabile all’indirizzo http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812 A questo punto vi basta connettere il Kinect al...