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)])](https://developer.android.com/static/images/guide/topics/sensors/dew_point.png?authuser=0000&hl=de)
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)](https://developer.android.com/static/images/guide/topics/sensors/absolute_humidity.png?authuser=0000&hl=de)
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