impressum sitemap contact
Sensoren ansprechen mit Android
posted on Wednesday, 31. March 2010 at 02:32 by xenon

Android bringt von Haus aus Unterstützung einer ganzen Reihe von Sensoren mit, die Werte wie Temperatur, Helligkeit oder Orientierung auslesen können. Ob der jeweilige Sensor vom Gerät unterstützt wird verrät einem die Funktion getSensorList(). Der Zugriff auf die Hardware erfolgt über das Android SDK.

Zum Auslesen eines Sensors unter Android benötigt man zuerst einmal einen SensorManager, an den man einen SensorEventListener "hängt". Letzteren muss man sich selber schreiben, da die Klasse SensorEventListener abstrakt implementiert ist. Hierfür müssen aber prinzipiell nur zwei Funktionen implementiert werden, in denen die Daten des jeweiligen Sensors dann verarbeitet (ausgegeben) werden. Registriert wird der eigene Listener dann letztendlich beim SensorManager via registerListener(), wobei man gleich noch die Updaterate übergibt.

In einem Minimalbeispiel könnte das Auslesen des OrientationSensors wie folgt aussehen:


public class OrientationSensorTest extends Activity
{
  protected SensorManager		sManager;
  protected TextView			mainText;
  
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    mainText = (TextView) findViewById(R.id.mainText);
       
    sManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
       
    OrientationListener sListener = new OrientationListener();
    sManager.registerListener(sListener, sManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL);
  }

  class OrientationListener implements SensorEventListener
  {
    @Override
    public void onSensorChanged(SensorEvent event)
    {
      mainText.setText("Orientation: " + event.values[0]);
    }
	
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy)
    {
      // unused
    }
  }
}

event.values ist hierbei ein Array vom Typ float, das die Orientierung des Geräts an den drei Achsen beschreibt. Was ihr mit diesen Rohwerten anfangt, bleibt euch überlassen... Und bevor ich gefragt werde, ob ich die XML-Datei fürs Layout mitliefern kann:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
    <TextView
    android:id="@+id/mainText"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/mainText"
    />
</LinearLayout>

Für Easteregg-Liebhaber ist auch etwas dabei. Ob man die Konstante GRAVITY_MARS neben GRAVITY_EARTH jetzt implementiert hat, um Android für die Zukunft zu rüsten sei mal dahingestellt - GRAVITY_JUPITER wird aber kaum jemals (sinnvollen) praktischen Einsatz erfahren. Was GRAVITY_THE_ISLAND und GRAVITY_DEATH_STAR_I aber im SDK zu suchen haben könnt ihr euch selbst zusammenreimen... ;)

Comments:
xenon
Saturday, 30. October 2010 at 20:03
I just checked with Opera 10 and had no problems... Can you please tell me which version of Opera you are using on which OS and what exactly the problem is? Thanks!
Leave a comment:
Name *:
Email *:
Homepage:
Text *:
* Pflichtfeld
Die Emailadresse wird für die Erstellung des Gravatars benötigt. Sie wird nicht an Dritte weitergegeben oder anderweitig verwendet.