2011-02-08 13 views
5

Eksperymentowałem z CLLocationManager dla aplikacji, którą buduję. Rozumiem, jak sprawdzić, czy usługi lokalizacyjne są włączone i czy użytkownik zezwolił mojej aplikacji na korzystanie z ich bieżącej lokalizacji.Powiadomienia o zmianach w usługach lokalizacyjnych?

Jeśli użytkownik umożliwia moja aplikacja do korzystania z ich lokalizacją na początku, a następnie użytkownikowi albo:

  1. zamienia usług lokalizacyjnych off wyraźnie
  2. wkłada telefon w tryb samolotowy
  3. wyraźnie de-autoryzuje Moje strony aplikacja do używania ich lokalizacji

Czy są jakieś powiadomienia, które mogę zasubskrybować i odpowiedzieć automatycznie, gdy ponownie otworzą moją aplikację?

Jeśli nie, czy najlepszym sposobem na obsłużenie tego scenariusza (aby zaktualizować widoki wyświetlające współrzędne GPS), aby ręcznie umieścić to zaznaczenie w metodach AppDelegate applicationDidFinishLaunching i applicationWillEnterForeground?

Powodem, dla którego myślałem, że powinien tam pójść, jest to, że po ponownym uruchomieniu aplikacji viewWillAppear nie jest uruchamiany dla pierwszego widoku i jeśli ten widok musi zmienić się z wyświetlania współrzędnych GPS na przyjazny komunikat z prośbą o ponowne włączyć usługi lokalizacyjne, AppDelegates były najlepszym hakiem, jaki mogłem wymyślić.

Dzięki!

Odpowiedz

2

Twoje podejście to dźwięk. Jeśli lokalizacja główna jest niedostępna podczas ponownego otwierania aplikacji lub nastąpiła zmiana w dostępie do sieci, możesz wysłać powiadomienie do tych kontrolerów viewController, które wymagają odpowiedniej aktualizacji. Sprawdź NSNotificationCenter

Nawet jeśli przyjmiesz powyższe proponuję zrobić to sprawdzić za każdym razem w viewDidAppear mimo to dostęp do sieci może zostać utracony w dowolnym momencie. Plus w testach liniowych, w których przeprowadza się kontrolę lokalizacji.

+0

dzięki za odpowiedź. Myślę, że zamierzam użyć 1) viewWillAppear, aby obejść początkowe uruchomienie aplikacji i za każdym razem, gdy widok zostanie załadowany na ekran nawet po jego początkowym załadowaniu, oraz 2) applicationWillEnterForeground w celu pokrycia ponownego otwarcia aplikacji z tła. W moich testach viewDidAppear jest wywoływany tylko przy pierwszym ładowaniu widoku, więc nie chciałbym go użyć, gdyby zmiana zasięgu sieci została zmieniona, gdy były jeszcze w aplikacji. – djibouti33

16

iOS 4.2 i później dostaniesz wezwanie delegat

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status; 
+1

To powinna być zaakceptowana odpowiedź –

Powiązane problemy