Mit getRotationMatrix und getOrientation in Android 2.1
Habe ich Probleme mit diesem viel zu lange. Dieser code sollte die Ausgabe dx,dy,dz für den Beschleunigungssensor und eine laufende Summe von der dx. Es sollte auch die Ausgabe von Azimut, pitch und roll.
Ich habe die Informationen, die hier gegeben werden, aber ohne Erfolg.
Dieser code ist nicht korrekt-Ausgang, pitch -, Azimut -, oder roll. Es Ausgänge 0.0, -0.0, -0.0 für die letzten drei textviews, beziehungsweise.
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
accelerometerValues = event.values.clone();
case Sensor.TYPE_MAGNETIC_FIELD:
geomagneticMatrix = event.values.clone();
sensorReady = true;
break;
default:
break;
}
if (geomagneticMatrix != null && accelerometerValues != null && sensorReady) {
sensorReady = false;
float[] R = new float[16];
float[] I = new float[16];
SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticMatrix);
float[] actual_orientation = new float[3];
SensorManager.getOrientation(R, actual_orientation);
tvXCoordinate.setText(accelerometerValues[0] + "");
tvYCoordinate.setText(accelerometerValues[1] + "");
tvZCoordinate.setText(accelerometerValues[2] + "");
floatXTotal += accelerometerValues[0];
tvXTotal.setText(floatXTotal + "");
tvAzimuth.setText(actual_orientation[0] + "");
tvPitch.setText(actual_orientation[1] + "");
tvRoll.setText(actual_orientation[2] + "");
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich könnte etwas fehlen (und Sie kann mittlerweile das Problem gelöst haben), aber für mich sieht es aus wie deine switch-Anweisung ist falsch:
Wenn Ihr sensor-Ereignis
TYPE_ACCELEROMETER
die Werte aus der Veranstaltung werden geklont, um sowohlaccelerometerValues
undgeomagneticMatrix
undsensorReady
wird auf true gesetzt werden. Ich glaube, Sie müssen möglicherweise zum ändern der Reihenfolge von diesem block, oder vielleicht fügen Sie einebreak;
nach Ihrem ersten Fall.Dem Grund, die Sie bekommen, 0.0, -0.0, -0.0 von getOrientation() ist, dass getRotationMatrix() nicht immer ein gültiges Ergebnis. Sie brauchen, um zu überprüfen, getRotationMatrix()'s return-Wert false, wenn das Ergebnis ungültig ist, oder true, wenn es erfolgreich.
Hinzugefügt: Nein, das kam nicht richtig heraus. Sie werden immer ein ungültiges Ergebnis für den Grund aganders hingewiesen. Überprüfen Sie den Rückgabewert würde einfach ein Indiz dafür, dass Sie waren in der Tat immer zu einem ungültigen Ergebnis.