La plate-forme Android fournit quatre capteurs qui vous permettent de surveiller diverses propriétés environnementales. Vous pouvez utiliser ces capteurs pour surveiller l'humidité ambiante relative, l'éclairage, la pression ambiante et la température ambiante à proximité d'un appareil Android. Ces quatre capteurs d'environnement sont basés sur le matériel et ne sont disponibles que si le fabricant de l'appareil les a intégrés à l'appareil. À l'exception du capteur de lumière, que la plupart des fabricants d'appareils utilisent pour contrôler la luminosité de l'écran, les capteurs d'environnement ne sont pas toujours disponibles sur les appareils. Pour cette raison, il est particulièrement important de vérifier au moment de l'exécution si un capteur d'environnement existe avant d'essayer d'en récupérer des données.
Contrairement à la plupart des capteurs de mouvement et de position, qui renvoient un tableau multidimensionnel de valeurs de capteurs pour chaque SensorEvent
, les capteurs d'environnement renvoient une seule valeur de capteur pour chaque événement de données. Par exemple, la température en °C ou la pression en hPa.
De plus, contrairement aux capteurs de mouvement et de position, qui nécessitent souvent un filtrage en passage haut ou bas, les capteurs d'environnement ne nécessitent généralement aucun filtrage des données ni aucun traitement de données. Le tableau 1 récapitule les capteurs d'environnement compatibles avec la plate-forme Android.
Tableau 1. Capteurs d'environnement compatibles avec la plate-forme Android
Capteur | Données d'événement des capteurs | Unités de mesure | Description des données |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | Température de l'air ambiant. |
TYPE_LIGHT |
event.values[0] |
lx | Éclairement. |
TYPE_PRESSURE |
event.values[0] |
hPa ou mbar | Pression de l'air ambiant. |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | Humidité relative ambiante. |
TYPE_TEMPERATURE |
event.values[0] |
°C | Température de l'appareil1. |
1 Les implémentations varient d'un appareil à l'autre. Ce capteur a été abandonné dans Android 4.0 (niveau d'API 14).
Utiliser les capteurs de lumière, de pression et de température
Les données brutes que vous collectez à partir des capteurs de lumière, de pression et de température ne nécessitent généralement aucun étalonnage, aucun filtrage ni modification, ce qui en fait certains des capteurs les plus faciles à utiliser. Pour acquérir des données de ces capteurs, vous devez d'abord créer une instance de la classe SensorManager
, que vous pouvez utiliser pour obtenir une instance de capteur physique.
Vous enregistrez ensuite un écouteur de capteur dans la méthode onResume()
et commencez à traiter les données entrantes des capteurs dans la méthode de rappel onSensorChanged()
. Le code suivant vous montre comment procéder:
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); } }
Vous devez toujours inclure les implémentations des méthodes de rappel onAccuracyChanged()
et onSensorChanged()
. Veillez également à toujours annuler l'enregistrement d'un capteur lorsqu'une activité est interrompue. Cela empêche un capteur de détecter en continu les données et de vider la batterie.
Utiliser le capteur d'humidité
Vous pouvez obtenir des données brutes d'humidité relative en utilisant le capteur d'humidité de la même manière que les capteurs de lumière, de pression et de température. Toutefois, si un appareil dispose à la fois d'un capteur d'humidité (TYPE_RELATIVE_HUMIDITY
) et d'un capteur de température (TYPE_AMBIENT_TEMPERATURE
), vous pouvez utiliser ces deux flux de données pour calculer le point de rosée et l'humidité absolue.
Point de rosée
Le point de rosée est la température à laquelle un volume d'air donné doit être refroidi, à une pression barométrique constante, pour que la vapeur d'eau se condense dans l'eau. L'équation suivante montre comment calculer le point de rosée:
![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=6&hl=fr)
Où ?
- td = température du point de rosée en degrés C
- t = température réelle en degrés C
- RH = humidité relative réelle en pourcentage (%)
- m = 17,62
- Tn = 243,12
Humidité absolue
L'humidité absolue est la masse de vapeur d'eau dans un volume donné d'air sec. L'humidité absolue est mesurée en grammes/mètre3. L'équation suivante montre comment calculer l'humidité absolue:
![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=6&hl=fr)
Où ?
- dv = humidité absolue en grammes/mètre3
- t = température réelle en degrés C
- RH = humidité relative réelle en pourcentage (%)
- m = 17,62
- Tn = 243,12 degrés C
- A = 6,112 hPa