I sensori Android consentono alle applicazioni di accedere ai sensori fisici sottostanti di un dispositivo mobile. Sono dispositivi virtuali che forniscono dati definiti da sensors.h, l'HAL (Hardware Abstraction Layer) dei sensori.
Che cosa sono i sensori Android?
I sensori Android sono dispositivi virtuali che forniscono dati provenienti da un insieme di sensori fisici: accelerometri, giroscopi, magnetometri, barometri, sensori di umidità, pressione, luce, prossimità e frequenza cardiaca.
Non sono inclusi nell'elenco dei dispositivi fisici che forniscono dati la fotocamera, il sensore di impronte digitali, il microfono e il touch screen. Questi dispositivi hanno un proprio meccanismo di generazione di report; la separazione è arbitraria, ma in generale i sensori Android forniscono dati con una larghezza di banda inferiore. Ad esempio, "100 Hz x 3 canali" per un accelerometro rispetto a "25 Hz x 8 MP x 3 canali" per una fotocamera o "44 kHz x 1 canale" per un microfono.
Android non definisce la modalità di connessione dei diversi sensori fisici al SoC (System on Chip).
- Spesso, i chip dei sensori sono collegati al SoC tramite un hub dei sensori, consentendo il monitoraggio e l'elaborazione a basso consumo energetico dei dati.
- Spesso, come meccanismo di trasporto vengono utilizzati il circuito interintegrato (I2C) o l'interfaccia periferica seriale (SPI).
- Per ridurre il consumo energetico, alcune architetture sono gerarchiche, con un'elaborazione minima eseguita nel circuito integrato specifico dell'applicazione (ASIC, ad esempio il rilevamento del movimento sul chip dell'accelerometro) e un'elaborazione maggiore eseguita in un microcontrollore (ad esempio il rilevamento dei passi in un hub dei sensori).
- La scelta di un'architettura in base alle caratteristiche di precisione, potenza, prezzo e dimensioni del pacchetto spetta al produttore del dispositivo. Per maggiori informazioni, consulta la sezione Stack dei sensori.
- Le funzionalità di batch sono un aspetto importante da considerare per l'ottimizzazione del consumo energetico energetico. Per maggiori informazioni, consulta la sezione Batching.
Ogni sensore Android ha un "tipo" che rappresenta il comportamento del sensore e i dati che fornisce.
- I tipi di sensori Android ufficiali sono definiti in sensors.h con i nomi SENSOR_TYPE_…
- La stragrande maggioranza dei sensori ha un tipo di sensore ufficiale.
- Questi tipi sono documentati nell'SDK Android.
- Il comportamento dei sensori di questi tipi viene testato nella CTS (Compatibility Test Suite) di Android.
- Se un produttore integra un nuovo tipo di sensore su un dispositivo Android, può definire un proprio tipo temporaneo per farvi riferimento.
- Questi tipi non sono documentati, quindi è improbabile che gli sviluppatori di applicazioni li utilizzino, perché non li conoscono o sanno che sono presenti raramente (solo su alcuni dispositivi di questo produttore specifico).
- Non vengono testati dalla CTS.
- Una volta che Android definisce un tipo di sensore ufficiale per questo tipo di sensore, i produttori devono smettere di utilizzare il proprio tipo temporaneo e utilizzare il tipo ufficiale invece. In questo modo, il sensore verrà utilizzato da un numero maggiore di sviluppatori di applicazioni.
- L'elenco di tutti i sensori presenti sul dispositivo viene fornito dall'implementazione HAL
implementazione.
- Possono essere presenti più sensori dello stesso tipo. Ad esempio, due sensori di prossimità o due accelerometri.
- La stragrande maggioranza delle applicazioni richiede un solo sensore di un determinato tipo. Ad esempio, un'applicazione che richiede l'accelerometro predefinito riceverà il primo accelerometro dell'elenco.
- I sensori sono spesso definiti da coppie di sensori di riattivazione e non di riattivazione, entrambi i sensori condividono lo stesso tipo, ma differiscono per la caratteristica di riattivazione.
I sensori Android forniscono i dati come una serie di eventi dei sensori.
Ogni evento contiene:
- Un handle del sensore che lo ha generato
- Il timestamp in cui l'evento è stato rilevato o misurato, in base a
SystemClock.elapsedRealtimeNanos() - Alcuni dati
L'interpretazione dei dati segnalati dipende dal tipo di sensore. Per i dettagli sui dati segnalati per ogni tipo di sensore, consulta le definizioni dei tipi di sensori.
Documentazione esistente
Per gli sviluppatori
- Panoramica
- Riferimento SDK
- Stack Overflow e siti web di tutorial
- Poiché a volte la documentazione sui sensori era carente, gli sviluppatori si sono rivolti a siti web di domande e risposte come Stack Overflow per trovare le risposte.
- Esistono anche alcuni siti web di tutorial, ma non trattano le funzionalità più recenti come il batch, il movimento significativo e i vettori di rotazione dei giochi.
- Le risposte non sono sempre corrette e indicano dove è necessaria ulteriore documentazione.
Per i produttori
- Panoramica
- Questa pagina Sensori e le relative sottopagine.
- HAL (Hardware Abstraction Layer)
- /platform/hardware/libhardware/+/android17-release/include/hardware/sensors.h
- Noto anche come "sensors.h"
- La fonte attendibile. Il primo documento da aggiornare quando vengono sviluppate nuove funzionalità.
- CDD (Compatibility Definition Document) di Android
- /compatibility/android-cdd.pdf
- Consulta le sezioni relative ai sensori.
- Il CDD è flessibile, quindi soddisfare i requisiti del CDD non è sufficiente per garantire sensori di alta qualità.