plusone

26. August 2011

einfacher Kompass

Da bin ich wieder,

da ich schon seit paar Tagen einen kleinen Kompass habe, werde ich nun ein Tutorial dafür schreiben.

Das wichtigste dafür ist der SensorManager.

SensorManager meinSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

meinSensorManager.registerListener(this, mSensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL);

TYPE_ORIENTATION ist die Art des Sensors und wird natürlich beim Kopass von der Ausrichtung des Handys spiegelt.
 Der erste Parameter beim SensorManager.registerListener(this... ist unsere Schnittstelle der SensorEventListener dieser muss in der Klasse implementiert werden. Oder eigene Klasse dafür schreiben.

Anschließend gucken wir uns die Methode onSensorChanged des Listeners an. Diese liefert uns die Daten, die wir benötigen.
event.values liefert uns ein float[] - Werte für drei Achsen.

event.values[0] gibt uns die Grad - 0 = Norden, 90 = Osten, 180 = Süden, 270 = Westen und 360 entspricht wieder dem Wert von 0.

Simples System :) Viel Spaß beim Ausprobieren.
Hier noch ma der Code mit Log.d-Ausgabe fürs LogCat.



import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;

public class KompassActivity extends Activity implements SensorEventListener {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        SensorManager meinSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        meinSensorManager.registerListener(this,
meinSensorManager
                .getDefaultSensor(Sensor.TYPE_ORIENTATION),
                SensorManager.SENSOR_DELAY_NORMAL);
    }
   
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        float grad = event.values[0];

        if (grad < 22) {
            Log.d("Kompass", "N");

        } else if (grad >= 22 && grad < 67) {
            Log.d("Kompass", "NE");

        } else if (grad >= 67 && grad < 112) {
            Log.d("Kompass", "E");

        } else if (grad >= 112 && grad < 157) {
            Log.d("Kompass", "SE");

        } else if (grad >= 157 && grad < 202) {
            Log.d("Kompass", "S");

        } else if (grad >= 202 && grad < 247) {
            Log.d("Kompass", "SW");

        } else if (grad >= 247 && grad < 292) {
            Log.d("Kompass", "W");

        } else if (grad >= 292 && grad < 337) {
            Log.d("Kompass", "NW");

        } else if (grad >= 337) {
            Log.d("Kompass", "N");

        }

    }
}
regards

Keine Kommentare:

Kommentar veröffentlichen