La plataforma de Android proporciona cuatro sensores que permiten supervisar varias propiedades del entorno. Puedes usar estos sensores para supervisar la humedad ambiental relativa, la iluminación, la presión ambiente y temperatura ambiente cerca de un dispositivo con Android. Los cuatro sensores de entorno se basan en hardware y solo están disponibles si un fabricante de dispositivos las incorporó en el dispositivo. A excepción de el sensor de luz, que la mayoría de los fabricantes de dispositivos usan para controlar el brillo de la pantalla, el medioambiente los sensores no siempre están disponibles en los dispositivos. Debido a esto, es particularmente importante que verificar en el tiempo de ejecución si existe un sensor de entorno antes de intentar adquirir datos de que la modifica.
A diferencia de la mayoría de los sensores de movimiento y de posición, que devuelven una matriz multidimensional de sensores
para cada SensorEvent
, los sensores de entorno devuelven un solo sensor
para cada evento de datos. Por ejemplo, la temperatura en °C o la presión en hPa.
A diferencia de los sensores de movimiento y de posición, que suelen requerir pasos
de paso alto o bajo
por lo que los sensores de entorno no suelen requerir ningún filtro ni procesamiento de datos. Tabla
1 proporciona un resumen de los sensores de entorno compatibles con la plataforma de Android.
Tabla 1: Sensores de entorno compatibles con la plataforma de Android.
Sensor | Datos del evento del sensor | Unidades de medición | Descripción de los datos |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | Temperatura ambiente |
TYPE_LIGHT |
event.values[0] |
lx | Iluminación |
TYPE_PRESSURE |
event.values[0] |
hPa o mbar | Presión de aire ambiental |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | Humedad relativa ambiental |
TYPE_TEMPERATURE |
event.values[0] |
°C | Temperatura del dispositivo1 |
1 Las implementaciones varían de un dispositivo a otro dispositivo. Este sensor quedó en desuso en Android 4.0 (API nivel 14).
Cómo usar los sensores de luz, presión y temperatura
Los datos sin procesar que se adquieren
de los sensores de luz, presión y temperatura
calibración, filtrado o modificación, lo que los convierte en algunos de los sensores más fáciles de usar. Para
Si adquieres datos de estos sensores, primero debes crear una instancia de la clase SensorManager
, que puedes usar para obtener una instancia de un sensor físico.
Luego, registra un objeto de escucha de un sensor en el método onResume()
y comienza a controlar los datos entrantes del sensor en el método de devolución de llamadas onSensorChanged()
. El
siguiente código te muestra cómo hacerlo:
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); } }
Siempre debes incluir implementaciones de los métodos de devolución de llamadas onAccuracyChanged()
y onSensorChanged()
. Además, trata
asegúrate de cancelar siempre el registro de un sensor cuando se detenga una actividad. Esto evita que un sensor
sin dejar de detectar datos
y agotar la batería.
Cómo usar el sensor de humedad
Puedes adquirir datos de humedad relativa sin procesar usando el sensor de humedad de la misma manera que usas
los sensores de luz, presión y temperatura. Sin embargo, si un dispositivo cuenta con un sensor de humedad,
(TYPE_RELATIVE_HUMIDITY
) y un sensor de temperatura (TYPE_AMBIENT_TEMPERATURE
), puedes usar estos dos flujos de datos para calcular
el punto de condensación y la humedad absoluta.
Punto de condensación
El punto de condensación es la temperatura a la que se debe enfriar un volumen determinado de aire, a una presión barométrica para que el vapor de agua se condense en agua. La siguiente ecuación muestra cómo podemos calcular el punto de condensación:
![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.google.cn/static/images/guide/topics/sensors/dew_point.png?authuser=19&hl=es)
Donde:
- td = temperatura del punto de condensación en °C
- t = temperatura real en °C
- RH = humedad relativa real en porcentaje (%)
- m = 17.62
- Tn = 243.12
Humedad absoluta
La humedad absoluta es la masa de vapor de agua en un volumen determinado de aire seco. Absoluta la humedad se mide en gramos/metro3. La siguiente ecuación muestra cómo calcula la humedad absoluta:
![d_v(t,RH) = (RH/100) · A · exp(m·
t/(T_n+t)/(273.15 + t)](https://developer.android.google.cn/static/images/guide/topics/sensors/absolute_humidity.png?authuser=19&hl=es)
Donde:
- dv = humedad absoluta en gramos/metro3
- t = temperatura real en °C
- RH = humedad relativa real en porcentaje (%)
- m = 17.62
- Tn = 243.12 °C
- A = 6.112 hPa