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, l'éclairage, la pression ambiante température ambiante à proximité d'un appareil Android. Les quatre capteurs d'environnement sont basés sur le matériel et ne sont disponibles que si un fabricant les a intégrées à un appareil. À l'exception des le capteur de lumière, que la plupart des fabricants utilisent pour contrôler la luminosité de l'écran, l'environnement les capteurs ne sont pas toujours disponibles sur les appareils. C'est pourquoi il est particulièrement important que vous vérifier, au moment de l'exécution, si un capteur d'environnement existe avant de tenter d'obtenir des données auprès de
Contrairement à la plupart des capteurs de mouvement et de position, qui renvoient un réseau multidimensionnel de capteurs
pour chaque SensorEvent
, les capteurs d'environnement renvoient un seul 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 passage haut ou bas
les capteurs d'environnement ne nécessitent
généralement aucun filtrage ou traitement des données. Tableau
1 fournit un résumé des 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énements 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 | Éclaircissement. |
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 appareil. 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 obtenues à partir des capteurs de lumière, de pression et de température ne nécessitent généralement aucune
l'étalonnage, le filtrage ou la modification,
ce qui en fait certains des capteurs les plus faciles à utiliser. À
Pour acquérir des données à partir de ces capteurs, vous devez d'abord créer une instance de la classe SensorManager
, que vous pouvez utiliser pour obtenir une instance d'un capteur physique.
Vous allez ensuite enregistrer un écouteur de capteurs dans la méthode onResume()
et commencer à traiter les données entrantes des capteurs dans la méthode de rappel onSensorChanged()
. La
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 des implémentations des méthodes de rappel onAccuracyChanged()
et onSensorChanged()
. De plus, être
veillez à toujours annuler l'enregistrement d'un capteur en cas d'interruption d'une activité. Cela empêche le capteur
détection continue des données
et décharge la batterie.
Utiliser le capteur d'humidité
Vous pouvez obtenir des données d'humidité relative brutes 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 est équipé à la fois d'un capteur d'humidité
(TYPE_RELATIVE_HUMIDITY
) et 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 température constante pour que la vapeur d'eau se condense en eau. L'équation suivante montre comment peut 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.com/static/images/guide/topics/sensors/dew_point.png?authuser=19&hl=fr)
Où ?
- td = température du point de rosée en degrés C
- t = température réelle en degrés C
- HR = humidité relative réelle en pourcentage (%)
- m = 17,62
- Tn = 243,12
Humidité absolue
L'humidité absolue correspond à la masse de vapeur d'eau dans un volume donné d'air sec. Absolue l'humidité est mesurée en grammes/mètre3. L'équation suivante montre comment peut calculer l'humidité absolue:
![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=19&hl=fr)
Où ?
- dv = humidité absolue en grammes/mètre3
- t = température réelle en degrés C
- HR = humidité relative réelle en pourcentage (%)
- m = 17,62
- Tn = 243,12 degrés C
- A = 6,112 hPa