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: Convertire un file DOC in RTF e PDF con office interop

In questo post vorrei proporvi del codice per poter convertire un file .doc in un file .rtf oppure .pdf utilizzando le API di interoperabilità di Office.Creeremo una classe, DocConverter, che esporrà le due funzionalità sopra citate.Cominciamo con il prevedere un attributo privato della classe che rappresenterà l’applicazione Word che utilizzeremo per la conversione. Creeremo l’istanza dell’attributo privato all’interno del costruttore della classe:PublicSubNew()
IfNot CreateWordApp() Then
ThrowNew ApplicationException("Assembly di interoperabilità con Office non trovato!")
EndIf
EndSub
Private _wordApp As Word.ApplicationClass
ProtectedFunction CreateWordApp() AsBoolean
Dim retval = True
Try
_wordApp = New Word.ApplicationClass()
_wordApp.Visible = False
Catch ex As System.Exception
_wordApp = Nothing
retval = False
EndTry
Return retval
EndFunction

La conversione del file doc sarà effettuata aprendo il file stesso ed eseguendo un’operazione di SaveAs:

Pr…

Cambiare la lingua di Visual Studio 2008

Oggi ho avuto qualche problema installando Windows Mobile 6 Professional SDK Refresh e Windows Mobile 6 Standard SDK Refresh.Scaricati i file di installazione e installati, ho provato a creare un progetto di tipo Windows Mobile 6.0 e mi sono beccato questo errore:Dopo qualche smanettamento abbiamo scoperto (e ringrazio il mitico Matteo per l’aiuto) che il mio Visual Studio 2008, pur essendo in Inglese (prova ne era il fatto che gli hotfix e la SP installata erano nella lingua di Albione) aveva come lingua impostata quella del sistema operativo (italiano).Ovviamente, non avrebbe mai potuto trovare la cartella 1040 (italiano) visto che l’installazione dell’SDK aveva supposto che la lingua del Visual Studio fosse Inglese (1033).La soluzione del problema è duplice:1) Duplicate la cartella 1033 presente nel percorso evidenziato dall’errore e la rinominate 10402) cambiate la lingua di Visual Studio.Per questa ultima eventualità basta andare nel menù Strumenti/Opzioni:e cambiare il linguaggi…

Tascam DR-05 registratore digitale per tutti

Diverso tempo fa ho acquistato il registratore digitale Tascam DR-05 e, ora, dopo diversi mesi di utilizzo, posso dire la mia a proposito.

Si tratta di un ottimo registratore digitale con microfono stereo che permette di ottenere registrazioni di ottima qualitaà anche in ambienti non perfetti dal punto di vista acustico.

Interessante la possibilità di utilizzare un cavalletto di piccole dimensioni come HAMA Mini treppiede o Mini Cavalletto Universale per tenere il microfono sollevato dal tavolo in fase di registrazione grazie allàattacco universale per macchina fotografica che il microfono ha nella parte inferiore.

Da segnalare anche il menu’ ben fatto e la possibilita’ di utilizzare una scheda SD esterna per memorizzare i file audio. Anche a livello di consumo batterie non e’ niente male. Consiglio l’uso delle alcaline non ricaricabili.

Il mio utilizzo e’ stato prettamente di registrazione di podcast vocali (no musica) ma le recensioni confermano che se la cava egregiamente con la mu…