Umgebungssensoren

Die Android-Plattform bietet vier Sensoren, mit denen Sie verschiedene Umgebungseigenschaften überwachen können. Sie können diese Sensoren verwenden, um die relative Luftfeuchtigkeit, die Beleuchtung, den Umgebungsdruck und die Umgebungstemperatur in der Nähe eines Android-Geräts zu überwachen. Alle vier Umgebungssensoren sind hardwarebasiert und nur verfügbar, wenn ein Gerätehersteller sie in das Gerät integriert hat. Mit Ausnahme des Lichtsensors, mit dem die meisten Gerätehersteller die Bildschirmhelligkeit steuern, sind Umgebungssensoren nicht immer auf den Geräten verfügbar. Daher ist es besonders wichtig, dass Sie zur Laufzeit prüfen, ob ein Umgebungssensor vorhanden ist, bevor Sie versuchen, Daten daraus abzurufen.

Im Gegensatz zu den meisten Bewegungs- und Positionssensoren, die für jede SensorEvent ein mehrdimensionales Array von Sensorwerten zurückgeben, geben Umgebungssensoren für jedes Datenereignis einen einzelnen Sensorwert zurück. Zum Beispiel die Temperatur in °C oder der Druck in hPa. Außerdem benötigen Umgebungssensoren im Gegensatz zu Bewegungs- und Positionssensoren, die häufig eine Hoch- oder Tiefpassfilterung erfordern, in der Regel keine Datenfilterung oder Datenverarbeitung. Tabelle 1 enthält eine Zusammenfassung der Umgebungssensoren, die auf der Android-Plattform unterstützt werden.

Tabelle 1 Umgebungssensoren, die auf der Android-Plattform unterstützt werden.

Sensor Sensorereignisdaten Maßeinheiten Datenbeschreibung
TYPE_AMBIENT_TEMPERATURE event.values[0] °C Umgebungstemperatur.
TYPE_LIGHT event.values[0] lx Beleuchtung.
TYPE_PRESSURE event.values[0] hPa oder mbar Luftdruck.
TYPE_RELATIVE_HUMIDITY event.values[0] % Relative Luftfeuchtigkeit.
TYPE_TEMPERATURE event.values[0] °C Gerätetemperatur1

1 Die Implementierungen variieren von Gerät zu Gerät. Dieser Sensor wurde in Android 4.0 (API-Level 14) eingestellt.

Licht-, Druck- und Temperatursensoren verwenden

Die Rohdaten, die Sie von den Licht-, Druck- und Temperatursensoren erhalten, müssen in der Regel nicht kalibriert, gefiltert oder verändert werden. Daher gehören sie zu den am einfachsten zu bedienenden Sensoren. Um Daten von diesen Sensoren zu erhalten, müssen Sie zuerst eine Instanz der SensorManager-Klasse erstellen, mit der Sie eine Instanz eines physischen Sensors abrufen können. Anschließend registrieren Sie einen Sensor-Listener in der onResume()-Methode und beginnen mit der Verarbeitung eingehender Sensordaten in der onSensorChanged()-Callback-Methode. Der folgende Code veranschaulicht, wie Sie dies tun können:

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);
    }
}

Du musst immer Implementierungen der Callback-Methoden onAccuracyChanged() und onSensorChanged() angeben. Außerdem müssen Sie die Registrierung eines Sensors immer aufheben, wenn eine Aktivität pausiert wird. Dadurch wird verhindert, dass ein Sensor kontinuierlich Daten erfasst und sich der Akku entlädt.

Luftfeuchtigkeitssensor verwenden

Sie können mit dem Luftfeuchtigkeitssensor auf die gleiche Weise wie mit den Licht-, Druck- und Temperatursensoren Rohdaten zur relativen Luftfeuchtigkeit abrufen. Wenn ein Gerät jedoch sowohl einen Luftfeuchtigkeitssensor (TYPE_RELATIVE_HUMIDITY) als auch einen Temperatursensor (TYPE_AMBIENT_TEMPERATURE) hat, können Sie mit diesen beiden Datenstreams den Taupunkt und die absolute Luftfeuchtigkeit berechnen.

Taupunkt

Der Taupunkt ist die Temperatur, bei der ein bestimmtes Luftvolumen mit konstantem barometrischen Druck gekühlt werden muss, damit Wasserdampf in Wasser kondensieren kann. Die folgende Gleichung zeigt, wie Sie den Taupunkt berechnen können:

t_d(t,RH) = Tn · (ln(RH/100) + m·t/(T_n+t
))/(m - [ln(RH/100%) + m·t/(T_n+t)])

Dabei gilt:

  • td = Taupunkttemperatur in Grad C
  • t = tatsächliche Temperatur in Grad C
  • RH = tatsächliche relative Luftfeuchtigkeit in Prozent (%)
  • m = 17,62
  • Tn = 243,12

Absolute Luftfeuchtigkeit

Die absolute Luftfeuchtigkeit ist die Wasserdampfmasse in einem bestimmten Volumen trockener Luft. Die absolute Luftfeuchtigkeit wird in Gramm/Meter3 gemessen. Die folgende Gleichung zeigt, wie Sie die absolute Luftfeuchtigkeit berechnen können:

d_v(t,RH) =  (RH/100) · A · exp(m·
t/(T_n+t)/(273,15 + t)

Dabei gilt:

  • dv = absolute Luftfeuchtigkeit in Gramm/Meter3
  • t = tatsächliche Temperatur in Grad C
  • RH = tatsächliche relative Luftfeuchtigkeit in Prozent (%)
  • m = 17,62
  • Tn = 243,12 Grad C
  • A = 6,112 hPa

Weitere Informationen