Zgodnie z interfejsem API CLLocationManager systemu iOS startmonitoringsignificantlocationchanges
poinformuje moją aplikację o znaczącej zmianie, np. 500 m lub więcej.
Ale chcę, aby moja aplikacja była powiadamiana tylko wtedy, gdy użytkownik / urządzenie wejdzie do nowego miasta, tak jak moja aplikacja. Aplikacja powinna się automatycznie otworzyć, jeśli jest zamknięta.
UWAGA: nie jest to aplikacja do obsługi map / nawigacji, więc nie chcę, aby moja aplikacja monitorowała dane o lokalizacji użytkownika i wyczerpała baterię urządzenia.
Proszę zaproponować jakieś rozwiązanie.
Odpowiedzi:
1 dla odpowiedzi № 1Wykonuje twoją aplikację. (przepraszam, że to nie jest komentarz - ale jest za długi na komentarz).
Zobacz szczegóły poniżej (z dokumentacji Apple)
Aby rozpocząć monitorowanie regionu, skonfigurujodpowiedni obiekt regionu i przekaż go do metody startMonitoringForRegion: swojego menedżera lokalizacji. W systemie iOS zarejestrowane regiony są zachowywane między uruchomieniami aplikacji. Jeśli dojdzie do przekroczenia granic regionu, gdy aplikacja iOS nie jest uruchomiona, system automatycznie ją obudzi (lub uruchomi ponownie) w tle, aby mógł przetworzyć zdarzenie. W tym przypadku słownik opcji przekazany do aplikacji: didFinishLaunchingWithOptions: metody delegata aplikacji zawiera klucz UIApplicationLaunchOptionsLocationKey wskazujący, że aplikacja została uruchomiona z powodu zdarzenia związanego z lokalizacją. Podczas procesu ponownego uruchamiania należy ponownie utworzyć obiekt menedżera lokalizacji i przypisać delegata zdolnego do obsługi zdarzeń związanych z regionami. Po wykonaniu tej czynności system dostarczy powiadomienie o regionie, dla którego została uruchomiona Twoja aplikacja. Wszystkie skonfigurowane wcześniej regiony są udostępniane we właściwości monitorowane regiony wszystkich tworzonych obiektów menedżera lokalizacji.
0 dla odpowiedzi nr 2
Myślę, że potrzebujesz metody klasy CLLocationManager:
- (void)startMonitoringForRegion:(CLRegion *)region
Parametry region
Obiekt regionu, który definiuje obwiednię domonitor. Ten parametr nie może być zerowy. Dyskusja Musisz wywołać tę metodę raz dla każdego regionu, który chcesz monitorować. Jeśli istniejący region o tym samym identyfikatorze jest już monitorowany przez aplikację, stary region zostanie zastąpiony nowym. Regiony dodane za pomocą tej metody są współdzielone przez wszystkie obiekty menedżera lokalizacji w Twojej aplikacji i przechowywane we właściwości monitorowaneRegions.
Wydarzenia regionalne są dostarczane dolocationManager: didEnterRegion: i locationManager: didExitRegion: metody delegata. Jeśli wystąpi błąd, menedżer lokalizacji wywołuje zamiast tego metodę locationManager: monitoringDidFailForRegion: withError: metoda delegata.
Aplikacja może zarejestrować jednocześnie do 20 regionów. Aby terminowo zgłaszać zmiany w regionie, usługa monitorowania regionu wymaga łączności sieciowej.