2013-02-23 15 views
6

Jako użytkownik kompasu mechanicznego zauważyłem, że nagłówek podany przez magnetometr jest często wyłączony o 45 stopni lub więcej, chociaż wskazanie kalibracji nie pojawiło się w takich przypadkach.
Magnetometr ios: wymuszenie wyświetlania widoku kalibracji

Jeśli testuję, lub używam mojej aplikacji na zewnątrz, zawsze dokonuję kalibracji magnetometru, gdy pojawi się mój widok kompasu. To działa, wydaje się, że jest to konieczne.

Nie chcę, aby pokazać użytkownikom mojej aplikacji niedokładne pozycji, gdy jest to możliwe do osiągnięcia mniej lub bardziej dokładne jeden, przez performig częstej kalibracji z postacią ośmiu ruchu.

Czy ktoś zna rozwiązanie wymuszające wyświetlanie widoku kalibracji magnetometru za każdym razem, gdy pojawia się widok kompasu?

Przeszukałem wszystkie (?) Posty tutaj, tylko jedna osoba miała podobny pomysł, ale bez odpowiedzi.

Odpowiedz

3

Obawiam się, nie ma sposobu, aby to zrobić - podczas gdy API pozwala na oddalenie pogląd kalibracji (używając dismissHeadingCalibrationDisplay nazwać), aby zapobiec jej przerywania interfejs swojej aplikacji, nie ma sposobu, aby wymusić kalibrację, aby rozpocząć. Sugeruję złożenia żądania funkcji z Apple, jeśli uważasz, że jest coś, co może być przydatne.

+1

Nie ma API, ale [to prosta metoda] (http://stackoverflow.com/a/42877044/1971013) działa. –

1

nie sądzę istnieje API dla że w iOS6 i poniżej :(

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. 
    } 

czcionki :Compass calibration objective-c

+0

Pytanie było inne: Asume ios uważa, że ​​kalibracja nie jest obecnie potrzebna, ale myślę, że zawsze jest potrzebna, więc chcę zobaczyć calibratuion, ilekroć pokażę kompas. – AlexWien

+0

'locationManagerShouldDisplayHeadingCalibration:' jest nazywane _pierwszą aktualizacją nagłówków kiedykolwiek jest request_, więc możesz 'startHeadingUpdates' jak tylko pokaż kompas i zwrócić TRUE. Czy to właśnie próbowałeś zrobić? –

+0

nie, podczas spacerów na świeżym powietrzu często potrzebujesz kompasu. ale kompas jest aktualny tylko wtedy, gdy zawsze go skalibrujesz, używając go w nieskończoność. więc chcę zmusić !! widok kalibracji, który będzie wyświetlany za każdym razem, gdy moja aplikacja zdecyduje się go wyświetlić. – AlexWien

1

Chwyć magnes na lodówkę i przesuń go w górnej części ekranu telefonu iPhone. Może być również konieczne obracanie iPhone'a na kilku osiach w tym samym czasie; bądź kreatywny.

Należy pamiętać, że aby ponownie oszukać magnetometr za pomocą magnesu, może zaistnieć konieczność ponownego ustawienia go w polu magnetycznym Ziemi. Robisz to, obracając iPhone'a na wszystkich osiach.

Miałem błąd, który wystąpił po ponownym zniknięciu ekranu kalibracji. Powyższa metoda pozwoliła mi wymusić pojawienie się w dowolnym momencie w ciągu 10 sekund.

Kilka dodatkowych informacji: Kiedy pojawia się ekran kalibracji, wywoływana jest aplikacja AppDelegate applicationWillResignActive. Następnie, gdy to zrobisz: applicationDidBecomeActive. (Mój błąd: tylko ja wznowiona mojego menedżera ruchu w applicationWillEnterForeground, a nie w applicationDidBecomeActive.)

Powiązane problemy