lunedì 4 maggio 2015

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.


Nessun commento: