I Sensori sono tanti, variano a seconda delle Architettura del Device.
Più il DEVICE costa, più dovrebbe avere Sensori al suo interno.
C’è una LIBRERIA Standard
OHA, hanno standardizzato le comunicazioni con i sensori. E quindi anche i Protocolli, la Lista dei Sensori che un Device deve avere per poter installare una certa versione di O.S. Android. A seconda dell’SDK che sta girando. L’SDK potrebbe vedere dei Sensori che a Livello Hardware, sono più recenti.
I Sensori che supportano tutto: accelerometri, sensori di gravità, giroscopi
Abbiamo anche i SENSORI di POSIZIONE, l’orientamento.
(magnetometri, GPS)
Ci sono anche i Sensori di Pressione.
O.S. Android, ha la Libreria SENSOR FRAMEWORK (gratuitamente). Le funzionalità adatte per comunicare con questi sensori.
Le Librerie specifica i device disponibili. C’è una Matrice di sensori.
Specifica la capacità dei Sensori. Ogni Sensore ha un nome, ma è bene pensare a specifiche particolari.
Possiamo avere un sensore A su un device e un altro sensore A su un altro device, ma potrebbero appartenere a 2 produzioni diverse.
E’ bene accertarsi che il SENSORE riesca ad acquisire informazioni.
C’è da considerare che il CONSUMO ENERGETICO, consuma batteria.
Bisogna anche valutare se tra i vari Sensori, se è supportato per certi aspetti.
E’ bene accertarsi di poter utilizzare il Sensore, che sicuramente avrà dei parametri diversi.
Sensori Medici, soprattutto.
SENSORI: acquisiscono i dati grezzi. Un buon ingegnere del software, fa dei Test: caso pessimo e caso: ottimo. Il caso pessimo è sicuro che funzioni. Sistemi Runtime, come O.S. Android.
Come acquisire questi dati? Listener. Gestore del Sensore.
C’è la chiamata allo Stacco / Attacco del Sensore. Il Sensore va resettato.
Quando l’Activity perde il focus(), il Sensore non è più attaccato.
La gestione del Sensore è collegata, impattata dalla gestione dell’Activity.
Il Sensore non é più attivo, va staccato.
E’ bene sempre staccare il Sensore, perché potrebbe servire ad un’altra Activity o ad un’altra APP.
Se il Sensore è stato utilizzato da un’altra APP, i dati che ci sono non sono più validi. Ricordiamoci che acquisisce i Dati Grezzi.
SENSORE: acqusisce i dati grezzi.
E’ bene che i dati siano Salvati, prima di staccare il SENSORE.
La gestione dei SENSORI è facilitata dalle Librerie, però è tutta a carico dello Sviluppatore.
Esiste una Tabella con le varie versioni dei Sensori, in corrispettiva all’SDK e alle API da utilizzare.
Per accedere ai SENSORI: include di una Libreria
e abbiamo il: SensorManager
Il SENSORMANAGER è l’oggetto che gestisce, l’istanza del Servizio. Cosa fa?
Registra i Listener e attacca e stacca i vari, sensori.
SENSOR, crea l’istanza del Sensori che vogliamo utilizzare.
SENSOREVENT istanzia un evento prodotto dal sensore.
SENSOR EVENT LISTENER
riceve notifiche quando il valore di un sensore cambiamenti
USO TIPICO
Al Runtime è bene identificare i Sensori che sono Attivi.
MONITORAGGIO: acquisizione di dati e salvataggio di Dati. Il Buffer è limitato. Il Monitoraggio è legato al salvataggio dei dati.
E’ bene salvare i dati su una connessione remota.
L’utilizzo del Sensore è legato a come salvare i dati.
I Sensori hanno un campionamento veloce, in genere. E’ bene gestire l’evento, che rileva una modifica di parametri. E’ come un cambio di configurazione.
L’evento di un Sensore, fornisce: nome, sensore, timestamp, accuratezza, dato.
Identificare il SENSORE? SensorManager
SensorManager è l’oggetto attivo da Utilizzare sempre nell’Activity.
Sensor.TYPE_ALL (Lista dei Sensori, ovviamente al RunTime)
LISTA SENSORI
Se si vuole elencare dei sensori di uno specifico tipo si può usare una costante diversa da TYPE_ALL, p.e.: TYPE_GYROSCOPE
Il SensorManager è quello che dobbiamo utilizzare, per far i vari controlli. Il SensorManager prende lo STATO dei sensori e permette di far i controlli.
Di solito a RunTime si ha l’elenco dei SENSORI. Quindi dall’elenco possiamo capire, che tipo di SENSORE è, quali sono le Sue capacità.
Il Sensore del cardiofrequenzimetro, è bene aver una Lista, dovremmo cercare una Lista giusta per Il Sensore giusto in base al tipo del Campionamento.
SISTEMA DI COORDINATE
in genere l’acquisizione viene fatta su coordinate cartesiane e l’asse Z viene verso di noi.
L’Orientamento viene fatto considerando le parti cartesiane.
INFO SENSORI
le funzionalità: getResolution() e getMaximumRange()
SENSORI: CAMPIONAMENTO
La risoluzione è l’intervallo massimo, il range del Dato massimo.
La precisione è importante.
Sono dati DINAMICI, dipendono dal Device.
Esempio di GIROSCOPIO.
ALTRI METODI
getMinDelay()
→ restituisce il tempo minimo necessario al Sensore per leggere il Dato
→ se il valore è uguale a 0, il Sensore fornisce i dati solo quando c’è un cambio di parametri monitorati
→ se il valore è diverso da 0 allora si tratta di un Sensore di Streaming.
getMaxDelay()
→ determina il ritardo massimo nell’acquisizione del dato
→ quando sta Campionando, quanto ci mette a terminare un CICLO di Campionamento e iniziarne un ALTRO.
Spesso non corrisponde alla Frequenza (Tale, è legata all’Hardware).
Tra hardware e software c’è un certo ritardo.
OnAccuracyChanged()
Quando il Sensore ha cambiato l’Accuratezza: Alta, Media, Bassa
onSensorChanged() → si riceve un riferimento a SensorEvent
Se l’acquisizione dura del TEMPO, è sempre bene ricordare che l’Utente può metterla in onPause().
E’ bene salvare il Bundle. Sempre se ci interessa salvare lo Stato, salvato prima.
CONTAPASSI: se l’UTENTE riceve una telefonata mentre sta camminando. E’ bene gestire il BUNDLE.
C’è anche il SENSORE di Luce.
Quando il SENSORE è riattaccato, vuol dire è Staccato! E’ bene quindi, riprendere il RIPRISTINO dei Dati, sempre se siamo interessati ai Dati.
Altrimenti i Dati saranno a Zero.
CONTAPASSI
è un Sensore a basso consumo. Lavora in backgroud
→ E’ bene ricordarsi di DISATTIVARE I SENSORI, perché O.S. Android non li disattiva da SOLO.
I Sensori consumano Batteria!!!