2013-02-23 28 views
6

Als Benutzer eines mechanischen Kompasses habe ich festgestellt, dass die Richtung, die das Magnetometer liefert, oft um 45 Grad oder mehr abweicht, obwohl die Kalibrierungsanzeige in diesen Fällen nicht angezeigt wurde.
ios Magnetometer: Kraftanzeige der Kalibrierungsansicht

Wenn ich meine App im Freien teste oder verwende, kalibriere ich das Magnetometer, wenn meine Kompassansicht angezeigt wird. Das funktioniert, es scheint, dass dies notwendig ist.

Ich möchte den Benutzern meiner App keinen ungenauen Kurs anzeigen, wenn es möglich ist, einen mehr oder weniger genauen Kurs zu erreichen, indem eine häufige Kalibrierung mit der Achterbewegung durchgeführt wird.

Kennt jemand eine Lösung, um die Anzeige der Magnetometerkalibrierungsansicht zu erzwingen, jedes Mal wenn meine Kompassansicht erscheint?

Ich suchte alle (?) Beiträge hier, nur eine Person hatte eine ähnliche Idee, aber ohne eine Antwort.

Antwort

3

Ich fürchte, es gibt keinen Weg, dies zu tun - während das API Sie erlaubt die Kalibrierung Ansicht entlassen (mit dem dismissHeadingCalibrationDisplay nennen) zu verhindern, dass die App-Schnittstelle unterbrochen wird, gibt es keine Möglichkeit, eine Kalibrierung zu zwingen, zu starten. ich würde vorschlagen, eine Feature-Anfrage mit Apple Filing, wenn Sie ihm etwas denken, die nützlich sein könnte.

+1

Es gibt keine API, aber [diese einfache Methode] (http://stackoverflow.com/a/42877044/1971013) funktioniert. –

1

ich es glaube nicht, dass irgendein api für das in iOS6 und unten :(

1
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager 
*)manager { 
     if(!manager.heading) return YES; // Got nothing, We can assume we got to calibrate. 
     else if(manager.heading.headingAccuracy < 0) return YES; // 0 means invalid heading, need to calibrate 
     else if(manager.heading.headingAccuracy > 5)return YES; // 5 degrees is a small value correct for my needs, too. 
     else return NO; // All is good. Compass is precise enough. 
    } 

Font :Compass calibration objective-c

+0

Die Frage war anders: Asos Ios denkt, dass die Kalibrierung derzeit nicht benötigt wird, aber ich denke, dass es immer benötigt wird, also möchte ich die Kalibrierungsansicht, wenn ich meinen Kompass zeige. – AlexWien

+0

'locationManagerShouldDisplayHeadingCalibration:' heißt _das erste Mal, wenn die Aktualisierung von Aktualisierungen immer angefordert wird_, so dass Sie 'headingUpdates' starten können, sobald Sie den Kompass anzeigen und TRUE zurückgeben. Hast du das versucht? –

+0

Nein, wenn Sie im Freien wandern, brauchen Sie oft den Kompass. aber der Kompass ist nur dann korrekt, wenn Sie ihn immer sofort kalibrieren. also will ich zwingen !! Die Kalibrierungsansicht, die angezeigt wird, wenn sich meine App dafür entscheidet, sie anzuzeigen. – AlexWien

1

Schnappen Sie sich einen Kühlschrankmagnet und bewegen Sie ihn um den oberen Bildschirmrand Ihres iPhones. Möglicherweise müssen Sie Ihr iPhone auch auf einigen Achsen gleichzeitig drehen. Seien Sie kreativ.

Beachten Sie, dass Sie das Magnetometer möglicherweise erneut mit einem Magneten täuschen müssen, damit es sich möglicherweise auf das Erdmagnetfeld zurücksetzen kann. Sie tun dies, indem Sie das iPhone über alle Achsen drehen.

Ich hatte einen Fehler, der auftrat, nachdem der Kalibrierungsbildschirm wieder verschwand. Die obige Methode erlaubte es mir, sie innerhalb von etwa 10 Sekunden nach Belieben erscheinen zu lassen.

Einige zusätzliche Informationen: Wenn der Kalibrierungsbildschirm erscheint, wird AppDelegates applicationWillResignActive aufgerufen. Dann, wenn es fertig ist: applicationDidBecomeActive. (Mein Fehler: Ich habe meinen Bewegungsmanager nur in applicationWillEnterForeground gestartet, nicht in applicationDidBecomeActive.)