2012-04-04 11 views
0

Ich habe kürzlich den Compass in Android 4.0 API-Demos ausprobiert. Es funktioniert so lange, wie Sie Ihr Telefon im Hochformat halten, aber sobald Sie es in die Landschaft stellen, zeigt der "Norden" in eine andere Richtung als zuvor. Ich dachte, dass es klar angegeben wurde here, dasshat der Kompass in Android API-Demos einen Fehler?

Das Koordinatensystem ist relativ zum Bildschirm des Telefons in seiner Standardausrichtung definiert. Die Achsen werden nicht vertauscht, wenn sich die Bildschirmausrichtung des Geräts ändert.

Aber genau das passiert!

Warum zeigt der Kompass in eine falsche Richtung? Ist die obige Aussage falsch oder handelt es sich lediglich um einen Fehler bei der Berechnung der Daten durch die API-Beispiele?

Antwort

3

Die Kompass-Demo ist in der Tat unvollständig. Beim Zeichnen eines Kompasses auf dem Bildschirm müssen Sie die Geräteausrichtung berücksichtigen. Werfen Sie einen Blick auf diese question für weitere Details.

This ist auch eine nette Diskussion des Themas.

Ich habe auch ein funktionierendes Beispiel auf meinem github Sie können verwenden. (es ist zu viel Code, um hier einzufügen) Die relevanten Klassen sind CompassSensorListener.java und CompassHelper.java.

Prost

+0

Hey, ich habe dein Projekt auf github ausgecheckt. Beim Debuggen sehe ich also einige Geheimnisse, von denen ich hoffe, dass Sie mich erleuchten können. Sie haben eine 'onDirectionChanged (Peilung)', die Werte von 1.XX bis 3.XX hat? Sie korrigieren diese Werte mit 'Location.getDeclination()' in Ihrem RadaView. Alles, was ich haben möchte, ist der 'Azimuth', den der Orientation_Sensor lieferte, bevor wir uns mit RotationMatrices beschäftigen müssen. Siehe http://stackoverflow.com/questions/10026575/how-to-handle-sensoreventvalues-to-get-correct-azimuth zur Verdeutlichung. Fühlen Sie sich frei, mir eine Mail an raffn1 AT Gmail DOT com –

+1

Ja onDirectionChanged gibt Ihnen den Azimut. mach einfach Math.toDegrees (mAzimuth), um Grade zu erhalten (0-359). Die Deklination ist ein sehr kleiner Wert, den ich nutze, um den echten Norden im Gegensatz zum magnetischen Norden zu bekommen. Sie können diesen Teil des Codes ignorieren. – Renard

+0

Das stimmt nicht wirklich. Ich habe 'onDirectionChanged' mit' Math.toDegrees (Peilung) 'und 'rotateAngle' in' RadarView.draw() 'mit http://pastebin.com/NYrTXwdR Ergebnissen protokolliert. Also nehme ich an, dass ich 180 hinzufügen muss ??? Wo zur Hölle ist das dokumentiert? Auch wie man richtige Werte für "Roll" und "Pitch" bekommt, ist völlig unklar –