2016-03-19 4 views
1

Ich habe einige Probleme, die Daten vom Beschleunigungsmesser und vom Kreisel gleichzeitig erhalten. Ich brauche diese Sensoren, um Beschleunigung und Orientierung zu erhalten, um die relative Position für ein Projekt zu berechnen, an dem ich arbeite. Wenn beide Sensoren gleichzeitig verwendet werden, führt dies zu einer sehr merkwürdigen Datenausgabe, bei der sich die Daten nur einmal pro Sekunde ändern. Wenn nur der Beschleunigungsmesser läuft, sind die Daten nicht viel besser, da er sich bei seiner schnellsten Einstellung nur ungefähr 10 Mal pro Sekunde ändert. Diese Daten werden in eine Datei mit einem Zeitstempel für jeden Sensor gelesen.Android: Daten gleichzeitig von Beschleunigungsmesser und Gyroskop erhalten

Ich habe Probleme, Tutorials im Internet zu finden, insbesondere mit mehr als einem Sensor gleichzeitig. Muss ich jeden Sensor auf ein anderes Gewinde setzen? Ich habe nicht viel Erfahrung mit Threads, wie könnte ich das tun.

+0

Können Sie bitte Ihren Ansatz zeigen (Code). –

+0

Hier sind einige zusätzliche Links: https://source.android.com/devices/sensors/sensor-types.html https://source.android.com/devices/sensors/index.html http: // developer.android.com/guide/topics/sensors/sensors_overview.html –

Antwort

3

Sie müssen nicht jeden Sensor auf einem anderen Thread platzieren. Yo kann die Klasse Sensormanager verwenden, um die verschiedenen Sensoren zu registrieren und deregistrieren, die Sie benötigen

public class SensorActivity extends Activity, implements SensorEventListener { 
private final SensorManager mSensorManager; 
private final Sensor mAccelerometer; 
private final Sensor mGyroscope; 

public SensorActivity() { 
    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mGyroscope = mSensorManager.getDefaultSensor(TYPE_GYROSCOPE); 
} 

protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
    mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_NORMAL); 
} 

protected void onPause() { 
    super.onPause(); 
    mSensorManager.unregisterListener(this); 
} 

Implementiert die sensorEventList Handler (speziell die Methode onSensorChanged) und überprüfen, wer die empfangenen Daten gehört:

public void onSensorChanged(SensorEvent sensorEvent) { 
    sensorName = sensorEvent.sensor.getName(); 
    Log.d(sensorName + ": X: " + sensorEvent.values[0] + "; Y: " + sensorEvent.values[1] + "; Z: " + sensorEvent.values[2] + ";"); 

}

+0

Ja das ist im Wesentlichen was ich getan habe. –

Verwandte Themen