2016-08-10 4 views

Antwort

0

Einfache Ausrichtungsprüfung (Hoch- und Querformat) reicht nicht aus. Sie müssen die Drehung des Bildschirms von seiner "natürlichen" Ausrichtung aus überprüfen und die Berechnung des Kompasskurses entsprechend anpassen.

((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation() 

See: Display.getRotation()

0

Aus Ihrer Frage, es war nicht ganz klar, ob man einen Kompass Ansicht irgendeine Art zu implementieren versuchen, oder einfach nur die allgemeinen Daten über die Ausrichtung am Telefon .

Entsprechend der Android docs gibt es einen TYPE_MAGNETIC_FIELD Wert, der verwendet werden kann, um magnetische Werte zu bestimmen. Wenn Sie auf dieser Seite nach unten blättern, sehen Sie auch andere nützliche Variablen zur Orientierung, einschließlich der veralteten Version TYPE_ORIENTATION. Die neue Art und Weise Orientierung zu handhaben ist

float[] getOrientation (float[] R, 
       float[] values) 

Und für den Fall haben Sie es oben nicht gefunden, wird die Funktion für Magnetfeld verwenden

GeomagneticField (float gdLatitudeDeg, 
       float gdLongitudeDeg, 
       float altitudeMeters, 
       long timeMillis) 

ist und die Dokumentation kann here finden. Sie können am Ende gehen Sie das Kaninchen Loch von Quaternionen gehen, wenn Sie hyper-genaue und nützliche totale Koppelnavigation und Orientierung Daten wollen. Wenn Sie diesen Weg gehen, empfehle ich die Dokumente aus der Unity Game Engine, wie sie einen guten Job machen, die Konsequenzen und die Bedeutung von Quaternionen zu erklären, ohne notwendigerweise den ganzen Weg in die Mathematik zu tauchen.

+0

Ich brauche Daten über die Ausrichtung des Telefons. Ich habe bereits einen Magnetfeldsensor implementiert, aber noch keine Filter implementiert, daher habe ich mich gefragt, ob es bereits eine API gibt, die mit allem ausgestattet ist, um einen Kompass mit hoher Präzision zu implementieren, ohne alles selbst zu schreiben. – leonz

+1

Es gibt keine API, von der ich weiß, dass solche Anwendungsfälle für Sie erledigt werden. Wenn Sie die Überschrift beibehalten möchten, unabhängig davon, wie der Benutzer die Geräteausrichtung ändert, müssen Sie speziell nach der Rotation suchen und die Berechnung selbst anwenden, wie ich in meiner Antwort angegeben habe. –