Capteurs environnementaux

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)])

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)

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

Vous pouvez également lire