Umgebungssensoren

Die Android-Plattform verfügt über vier Sensoren, mit denen Sie verschiedene Umgebungseigenschaften überwachen können. Mit diesen Sensoren können Sie die relative Luftfeuchtigkeit, die Beleuchtung, den Umgebungsdruck und Umgebungstemperatur in der Nähe eines Android-Geräts ermittelt. Alle vier Umgebungssensoren sind hardwarebasiert und nur verfügbar, wenn der Gerätehersteller sie in das Gerät integriert hat. Mit Ausnahme von den Lichtsensor, mit dem die meisten Gerätehersteller Bildschirmhelligkeit, Umgebung Sensoren sind auf Geräten nicht immer verfügbar. Aus diesem Grund ist es besonders wichtig, Prüfen Sie während der Laufzeit, ob ein Umgebungssensor vorhanden ist, bevor Sie versuchen, Daten von .

Im Gegensatz zu den meisten Bewegungs- und Positionssensoren, die ein mehrdimensionales Sensorarray zurückgeben Werte für jede SensorEvent geben Umgebungssensoren einen einzelnen Sensor zurück für jedes Datenereignis einen Wert. Zum Beispiel die Temperatur in °C oder der Druck in hPa. Im Gegensatz zu Bewegungs- und Positionssensoren, die oft einen hohen oder niedrigen Durchlauf erfordern und Umgebungssensoren erfordern in der Regel keine Datenfilterung oder -verarbeitung. Tabelle 1 bietet eine Übersicht über die 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 Implementierung variiert 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, benötigen in der Regel Kalibrierung, Filterung oder Änderung, was sie zu den nutzerfreundlichsten Sensoren macht. Bis Um Daten von diesen Sensoren zu erfassen, erstellen Sie zuerst eine Instanz der SensorManager-Klasse, mit der Sie eine Instanz eines physischen Sensors abrufen können. Anschließend registrieren Sie einen Sensor-Listener in der Methode onResume() und beginnen mit der Verarbeitung eingehender Sensordaten in der Callback-Methode onSensorChanged(). Die Der folgende Code zeigt, wie das geht:

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

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

Luftfeuchtigkeitssensor verwenden

Sie können Rohdaten zur relativen Luftfeuchtigkeit abrufen, indem Sie den Luftfeuchtigkeitssensor auf dieselbe Weise verwenden wie Sie Licht-, Druck- und Temperatursensoren an. Hat ein Gerät sowohl einen Luftfeuchtigkeitssensor (TYPE_RELATIVE_HUMIDITY) und einen Temperatursensor (TYPE_AMBIENT_TEMPERATURE) haben, können Sie diese beiden Datenstreams zur Berechnung von der Taupunkt und die absolute Luftfeuchtigkeit.

Taupunkt

Der Taupunkt ist die Temperatur, bei der ein bestimmtes Luftvolumen konstant gekühlt werden muss Luftdruck, damit Wasserdampf zu Wasser kondensiert. Die folgende Gleichung zeigt, wie Sie den Taupunkt berechnen kann:

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
  • Relative Luftfeuchtigkeit = 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. Absolut Die Luftfeuchtigkeit wird in Gramm/Meter gemessen3. Die folgende Gleichung zeigt, wie Sie die absolute Luftfeuchtigkeit berechnen:

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
  • Relative Luftfeuchtigkeit = tatsächliche relative Luftfeuchtigkeit in Prozent (%)
  • m = 17,62
  • Tn = 243,12 Grad C
  • A = 6,112 hPa

Außerdem sollten Sie