La piattaforma Android fornisce quattro sensori che ti consentono di monitorare varie proprietà ambientali. Puoi usare questi sensori per monitorare l'umidità relativa dell'ambiente circostante, l'illuminamento, la pressione e temperatura ambiente vicino a un dispositivo Android. Tutti e quattro i sensori ambientali sono basati su hardware e sono disponibili solo se il produttore li ha integrati in un dispositivo. Ad eccezione di il sensore di luminosità, utilizzato dalla maggior parte dei produttori di dispositivi per controllare la luminosità dello schermo, l'ambiente i sensori non sono sempre disponibili sui dispositivi. Per questo motivo, è particolarmente importante che tu verificare in fase di esecuzione se esiste un sensore ambientale prima di tentare di acquisire dati da li annotino.
A differenza della maggior parte dei sensori di movimento e di posizione, che restituiscono un array multidimensionale di sensori
valori per ogni SensorEvent
, i sensori ambientali restituiscono un singolo sensore
per ogni evento di dati. Ad esempio, la temperatura in °C o la pressione in hPa.
Inoltre, a differenza dei sensori di movimento e di posizione, che spesso richiedono un passaggio alto o basso
di filtro, i sensori ambientali in genere non richiedono filtri o elaborazione dei dati. Tavolo
1 fornisce un riepilogo dei sensori ambientali supportati sulla piattaforma Android.
Tabella 1. Sensori dell'ambiente supportati sulla piattaforma Android.
Sensore | Dati sugli eventi dei sensori | Unità di misura | Descrizione dei dati |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | Temperatura dell'aria ambiente. |
TYPE_LIGHT |
event.values[0] |
lx | Illuminazione. |
TYPE_PRESSURE |
event.values[0] |
hPa o mbar | Pressione dell'aria ambiente. |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | Umidità relativa ambientale. |
TYPE_TEMPERATURE |
event.values[0] |
°C | Temperatura del dispositivo.1 |
1 Le implementazioni variano da dispositivo a dispositivo dispositivo. Questo sensore è stato ritirato in Android 4.0 (livello API 14).
Utilizza i sensori di luce, pressione e temperatura
I dati non elaborati acquisiti dai sensori di luce, pressione e temperatura di solito non richiedono
calibrazione, filtraggio o modifica, per cui sono tra i sensori più facili da usare. A
acquisirai dati da questi sensori. Per prima cosa crei un'istanza della classe SensorManager
, che puoi utilizzare per ottenere un'istanza di un sensore fisico.
Quindi, registra un listener del sensore nel metodo onResume()
e inizi a gestire i dati dei sensori in arrivo nel metodo di callback onSensorChanged()
. La
il seguente codice ti mostra come fare:
Kotlin
class SensorActivity : Activity(), SensorEventListener { private lateinit var sensorManager: SensorManager private var pressure: Sensor? = null public override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) // Get an instance of the sensor service, and use that to get an instance of // a particular sensor. sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE) } override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) { // Do something here if sensor accuracy changes. } override fun onSensorChanged(event: SensorEvent) { val millibarsOfPressure = event.values[0] // Do something with this sensor data. } override fun onResume() { // Register a listener for the sensor. super.onResume() sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL) } override fun onPause() { // Be sure to unregister the sensor when the activity pauses. super.onPause() sensorManager.unregisterListener(this) } }
Java
public class SensorActivity extends Activity implements SensorEventListener { private SensorManager sensorManager; private Sensor pressure; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Get an instance of the sensor service, and use that to get an instance of // a particular sensor. sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE); } @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { // Do something here if sensor accuracy changes. } @Override public final void onSensorChanged(SensorEvent event) { float millibarsOfPressure = event.values[0]; // Do something with this sensor data. } @Override protected void onResume() { // Register a listener for the sensor. super.onResume(); sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { // Be sure to unregister the sensor when the activity pauses. super.onPause(); sensorManager.unregisterListener(this); } }
Devi sempre includere le implementazioni dei metodi di callback onAccuracyChanged()
e onSensorChanged()
. Inoltre, ricorda di
assicurati di annullare sempre la registrazione di un sensore quando un'attività si interrompe. In questo modo, un sensore
rilevare continuamente i dati e scaricare la batteria.
Utilizzare il sensore di umidità
Puoi acquisire dati non elaborati sull'umidità relativa utilizzando il sensore di umidità nello stesso modo in cui utilizzi
i sensori di luce, pressione e temperatura. Tuttavia, se un dispositivo è dotato di entrambi i sensori di umidità
(TYPE_RELATIVE_HUMIDITY
) e un sensore di temperatura (TYPE_AMBIENT_TEMPERATURE
) puoi usare questi due stream di dati per calcolare
il punto di rugiada e l'umidità assoluta.
Punto di rugiada
Il punto di rugiada è la temperatura a cui deve essere raffreddato un determinato volume di aria, pressione barometrica, affinché il vapore acqueo si condensa in acqua. La seguente equazione mostra come può calcolare il punto di rugiada:
![t_d(t,RH) = Tn · (ln(RH/100) + m·t/(T_n+t)
))/(m - [ln(RH/100%) + m·t/(T_n+t)])](https://developer.android.com/static/images/guide/topics/sensors/dew_point.png?authuser=8&hl=it)
Dove,
- td = temperatura del punto di rugiada in gradi C
- t = temperatura effettiva in gradi C
- RH = umidità relativa effettiva in percentuale (%)
- m = 17,62
- Tn = 243,12
Umidità assoluta
L'umidità assoluta è la massa del vapore acqueo in un determinato volume di aria secca. Assoluto l'umidità viene misurata in grammi/metro3. La seguente equazione mostra come può calcolare l'umidità assoluta:
![d_v(t,RH) = (RH/100) · A · exp(m·
t/(T_n+t)/(273,15 + t)](https://developer.android.com/static/images/guide/topics/sensors/absolute_humidity.png?authuser=8&hl=it)
Dove,
- dv = umidità assoluta in grammi/metro3
- t = temperatura effettiva in gradi C
- RH = umidità relativa effettiva in percentuale (%)
- m = 17,62
- Tn = 243,12 gradi C
- A = 6,112 hPa