2010-12-30 13 views
1

Ich möchte den Beschleunigungsmesser in einem Android-Handset für meine Anwendung verwenden. Die Daten vom Sensor werden zusammen mit einem GPS-Punkt gespeichert, so dass der Wert nur benötigt wird, wenn der GPS-Punkt aktualisiert wird.Android Accessing Accelerometer: Gibt immer 0 als Wert

Wenn ich den angehängten Code verwende, sind die Werte immer Null. API Ebene 8 Berechtigungen: Internet, Fein Ort Testing Device: Galaxy S (i9000), Nexus One

Irgendwelche Vorschläge? Ich stecke an diesem Punkt fest.

Mit freundlichen Grüßen aus Deutschland, Pascal

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

public class AccelerometerService extends Activity{ 
    AccelerometerData accelerometerData; 
    private SensorManager mSensorManager; 
    private float x,y,z; 
    private class AccelerometerData implements SensorEventListener{ 

     public void onSensorChanged(SensorEvent event) { 
      x = event.values[0]; 
      y = event.values[1]; 
      z = event.values[2]; 
     } 
     public void onAccuracyChanged(Sensor sensor, int accuracy) {} 
    } 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
     mSensorManager.registerListener(accelerometerData, 
       mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
       SensorManager.SENSOR_DELAY_FASTEST); 
    } 
    @Override 
    protected void onResume() { 
     super.onResume(); 
    } 
    @Override 
    protected void onStop() { 
     mSensorManager.unregisterListener(accelerometerData); 
     super.onStop(); 
    } 
    public String getSensorString() 
    { 
     return ("X: " + x+"m/s, Y: "+ y +"m/s, Z: "+ z +"m/s"); 
    } 
} 

Antwort

2

Sie einen Wert accelerometerData an einer beliebigen Stelle zuweisen Sie? Ich hätte erwartet, dass es in der onCreate Methode zugewiesen wird.

Sie können sich auch für die Bildschirmausrichtung berücksichtigen müssen und alle Nicht-Beschleunigungsmesser Ereignisse herauszufiltern, die in kommen (ich bin nicht sicher, ob die Filterung unbedingt notwendig ist, aber es ist in der Accelerometer Play SDK sample.

+0

Ich bin Entschuldigung, ich bin ein echter Noob. Also um zu sehen, ob ich das richtig gemacht habe, sollte ich wie oben initialisieren und "AccelerometerData accelerometerData = new AccelerometerData();" zu meiner Oncreate-Methode hinzufügen? Thx für Ihre beeindruckende schnelle Antwort, Pascal – Rotesmofa

+1

James war schneller als ich, löschte meine doppelte Antwort. Sie sollten "accelerometerData = new AccelerometerData();" zur onCreate-Methode hinzufügen. Ich denke auch, dass es besser wäre, den Listener in onResume/onPause statt onCreate/onStop zu registrieren/abzumelden. – ketorin

+0

thx für die Hilfe, ich habe es jetzt funktioniert :) – Rotesmofa