Android Sensoren
Willemers Informatik-Ecke

Android-Geräte haben mehrere Sensoren eingebaut.

Die Sensoren können in der Geräte-Emulation simuliert werden.

SensorEventListener

Um an die Werte der Sensoren zu gelangen, implementiert die Activity den SensorEventListener. Das erzwingt eine Implementierung der Methoden onSensorChanged und onAccuracyChanged. In der Regel ist nur die erste Methode interessant.

@Override
public void onSensorChanged(SensorEvent event) {
    super.onSensorChanged(event);
    // Sensorwerte in event.values[0] bis event.values[2]
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    super.onAccuracyChanged(sensor, accuracy);
    // ...
}
Man legt lokal einen SensorManager und einen Sensor als lokale Referenzen an und ermittelt diese beispielsweise in onCreate.
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Die Sensoren werden dann bei onResume registriert.
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
Die Sensorereignisse werden auch empfangen, wenn die App im Hintergrund läuft. Ist das nicht erforderlich, sollte der Sensor in onPause deaktiviert werden. Ansonsten wird unnötig Energie verbraucht.
@Override
protected void onPause() {
  sensorManager.unregisterListener(this);
  super.onPause();
}

Beschleunigungen

Zu den Beschleunigungen, die immer da ist, gehört die Erdanziehungskraft (GRAVITY). Mit ACCELEROMETER werden auch andere Beschleunigungen berechnet. Dort ist die Erdanziehung eingerechnet. Bei der LINEAR_ACCELERATION wird die Erdanziehung nicht berücksichtigt.

Achsen

Die Beschleunigungskräfte, die Magnetfelder und die Drehungen werden in einem Koordinatensystem aus drei Achsen im Raum betrachtet.

Diese Werte lassen sich aus dem Parameter SensorEvent der Callback-Methode onSensorChanged auslesen. Diese Klasse enthält das Array values.