Passa ai contenuti principali

Microsoft Band SDK–Accesso ai sensori

In questo post cominciamo a vedere quali cambiamenti e novità sono state introdotte nella nuova versione (la 1.3.10417) dell’SDK per il Band rilasciata il 30 aprile scorso.
In particolare, in questo post, prenderemo in esame la parte di accesso ai sensori e partiremo dal mio precedente post "Accesso ai sensori".
Per cominciare, la nuova versione dell’SDK espone un nuovo sensore, quello per il consumo calorico, il quale ci permette di conoscere il consumo di calorie a partire dall’ultimo reset del device.
Il suo funzionamento è analogo a quello degli altri (ad esempio quello di misurazione della temperatura corporea).
Come già mostrato nel precedente post, l’accesso ai sensori avviene tramite l’istanza dell’interfaccia ISensorManager esposta dall’istanza corrente di IBandClient.
In questa versione dell’SDK, oltre al già citato sensore per il consumo calorico, è stata rinominata la proprietà di ISensorManager che espone il sensore di esposizione agli UV.
Come possiamo vedere dalla successiva immagine, la proprietà che ci da accesso a tale sensore si chiama ora UV, anziché Ultraviolet come nella precedente versione.

image

Il sensore per l’esposizione UV, inoltre, prevede un cambiamento nell’interfaccia IBandUVReading restituita dall’evento ReadingChanged.

image

La proprietà IndexLevel è un’enumerazione che indica il livello di esposizione ai raggi UV (a differenza della versione precedente che restituiva un numero poco comprensibile).

image

Altra cosa che è stata cambiata riguarda la gestione della privacy nell’utilizzo dei dati provenienti dai sensori.
Come possiamo osservare dalla seguente immagine:

image

l’interfaccia IBandSensor espone due metodi per gestire il consenso dell’utente all’utilizzo dei dati del sensore.
Il metodo GetCurrentUserConsent ci fornisce la selezione dell’utente corrente in fatto di consenso all’utilizzo di quel determinato sensore ed è il metodo che dobbiamo utilizzare per verificare se l’utente ha dato il consenso o meno.
Il metodo RequestUserConsentAsync permette, invece, di richiedere l’autorizzazione all’utente. Nella realtà dei fatti, solo alcuni sensori hanno la richiesta esplicita all’utente, cioè, nel momento in cui si invoca tale metodo, si ha effettivamente la visualizzazione della finestra di richiesta del consenso.
Per capire quali sensori effettivamente mostrano il consenso all’utente, è sufficiente andare a decompilare la Microsoft.Band.dll (ad esempio con Reflector) e vedere che tutti i sensori derivano da una classe internal (Friend) chiamata BandSensorBase(Of T), la cui struttura è la seguente:

image

e, in particolare, il metodo RequestUserConsentAsync ha la seguente implementazione

image

che restituisce sempre true.
Il metodo è Overridable e, infatti, in alcuni sensori, come ad esempio l’HeartRate, viene ridefinito con la seguente implementazione:

image

cioè viene effettivamente richiesto il consenso all’utente.
In questa versione dell’SDK, l’unico sensore che richiede effettivamente il consenso all’utente è proprio l’heartrate.
In ogni caso è buona norma prevedere sempre l’utilizzo del metodo RequestUserConsentAsync a prescindere dal tipo di sensore in modo da non avere sorprese se in futuro cambiasse la situazione.

' Recupero il consenso precedentemente espresso dall'utente
Dim userConsent As UserConsent = bandClient.SensorManager.HeartRate.GetCurrentUserConsent()
If userConsent <> UserConsent.Granted Then
    ' se il consenso non e' concesso richiedo il consenso all'utente
    If Await bandClient.SensorManager.HeartRate.RequestUserConsentAsync() Then
        userConsent = UserConsent.Granted
    End If
End If
If userConsent = UserConsent.Granted Then
    AddHandler bandClient.SensorManager.HeartRate.ReadingChanged, AddressOf HeartRate_ReadingChanged
    Await bandClient.SensorManager.HeartRate.StartReadingsAsync()
Else
    ' Utente non ha concesso il consenso e la lettura non viene avviata
End If

Nell’esempio precedente di codice viene preso in esame il sensore del battito cardiaco, ma il meccanismo è lo stesso per qualsiasi altro sensore.


Commenti

Post popolari in questo blog

VB.NET : Aggregare stringhe con LINQ

Tip facile facile, ma a qualcuno potrebbe servire. Supponiamo di avere una lista di stringhe (magari come risultato di una query LINQ) e di voler ottenere una stringa con la concatenazione delle stesse: Dim list = CreateList() Dim concatStr = (From s In list _ Select s).Aggregate( Function (currentString, nextString) currentString + nextString) MessageBox.Show(concatStr) Il metodo CreateList non ci interessa, in questo momento, ma crea una lista di oggetti String. Protected Function CreateList() As IEnumerable( Of String ) Dim list As String () = {" stringa1 ", " stringa2 ", " stringa3 ", " stringa4 ", " stringa5 "} Return list.AsEnumerable() End Function Questo metodo potrebbe restituire una qualsiasi lista di oggetti di cui, nella select successiva recuperiamo solo stringhe. La stessa tecnica è utilizzabile per concatenare stringhe inserendovi un carattere separatore Dim list = CreateList() Dim

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

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: Public Sub New () If Not CreateWordApp() Then Throw New ApplicationException(" Assembly di interoperabilità con Office non trovato! ") End If End Sub Private _wordApp As Word.ApplicationClass Protected Function CreateWordApp() As Boolean Dim retval = True Try _wordApp = New Word.ApplicationClass() _wordApp.Visible = False Catch ex As System.Exception _wordApp = Nothing retval = False End Try Return retval End Function La conve