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 y la temperatura ambiente cerca de un dispositivo con Android. Los cuatro sensores de entorno están basados en hardware y están disponibles solo si un fabricante de dispositivos los incorporó en el dispositivo. A excepción del sensor de luz, que la mayoría de los fabricantes de dispositivos utilizan para controlar el brillo de la pantalla, los sensores de entorno no siempre están disponibles en los dispositivos. Por lo tanto, es muy importante que verifiques durante el tiempo de ejecución si existe un sensor de entorno antes de intentar adquirir datos de él.
A diferencia de la mayoría de los sensores de movimiento y de posición, que muestran un array multidimensional de valores de sensor para cada SensorEvent
, los sensores de entorno muestran un solo valor de sensor para cada evento de datos. Por ejemplo, la temperatura en °C o la presión en hPa.
Además, a diferencia de los sensores de movimiento y de posición, que a menudo requieren filtrado de paso alto o bajo, los sensores de entorno no suelen requerir ningún tipo de filtrado ni procesamiento de datos. En la tabla 1, se 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 según el 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 obtienes de los sensores de luz, presión y temperatura no suelen requerir calibración, filtrado ni modificación, lo que los convierte en algunos de los sensores más fáciles de usar. Para adquirir 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()
. En el siguiente código, se 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, asegúrate de cancelar siempre el registro de un sensor cuando se detenga una actividad. Esto evita que un sensor detecte continuamente datos y agote la batería.
Cómo usar el sensor de humedad
Puedes adquirir datos de humedad relativa sin procesar con el sensor de humedad de la misma manera que usas los sensores de luz, presión y temperatura. Sin embargo, si un dispositivo tiene 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 rocío 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 presión barométrica constante, para que el vapor del agua se condense en agua. En la siguiente ecuación, se muestra cómo 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.com/static/images/guide/topics/sensors/dew_point.png?authuser=7&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. La humedad absoluta se mide en gramos por metro3. En la siguiente ecuación, se muestra cómo calcular la humedad absoluta:
![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=7&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