2010-07-06

Nah oder fern - Spaß mit Sensoren

In diesem Beitrag möchte ich mich mit einem der Sensoren von Android-Geräten beschäftigen. Wenn Sie sich beispielsweise ein Nexus One ans Ohr halten, wird dessen Display ausgeschaltet. Sobald Sie das Telefon vom Ohr entfernen, aktiviert es sich wieder. Gesteuert wird dies mittels eines (An)näherungssensors (proximity sensor). Dieser lässt sich sehr bequem in eigenen Programmen nutzen. Beachten Sie aber bitte, dass solche Sensoren nicht in jedem Androiden vorhanden sind. Auch der Emulator kennt ihn derzeit nicht.

private SensorManager manager;
private SensorEventListener listener;
private Sensor sensor;
Java2html

manager = (SensorManager) getSystemService(SENSOR_SERVICE);
Java2html

sensor = null;
List<Sensor> sensors = manager.getSensorList(Sensor.TYPE_PROXIMITY);
if (sensors.size() > 0) {
    sensor = sensors.get(0);
    manager.registerListener(listener, sensor,
    SensorManager.SENSOR_DELAY_NORMAL);
}
Java2html

In einem ersten Schritt besorgen wir uns also eine Instanz der Klasse SensorManager . Sie gibt unter anderem Auskunft darüber, welche Sensoren vorhanden sind.  Falls ein proximity sensor zur Verfügung steht, registrieren wir einen SensorEventListener. Eine Trivialimplementierung sieht so aus:

    listener = new SensorEventListener() {

      @Override
      public void onSensorChanged(SensorEvent event) {
        if (event.values.length > 0) {
          float current = event.values[0];
          float maxRange = event.sensor.getMaximumRange();
          boolean far = (current == maxRange);
          Log.d("", Boolean.toString(far));
        }
      }

      @Override
      public void onAccuracyChanged(Sensor sensor, int accuracy) {
      }
    };
Java2html

Falls Sie die merkwürdig anmutende Zuweisung an die Variable far irritiert: die Dokumentation rät zu diesem Vorgehen, wenn Sensoren keine richtigen Längenangaben liefern. Und ein letzter Tipp: wenn Sie das Ganze in eine Activity packen, denken Sie bitte daran, die Methode onDestroy zu überschreiben und dort den Listener zu entfernen.

No comments:

Post a Comment