2017-01-21 22 views
1

Я разрабатываю приложение для отслеживания местоположений. Пользователь может начать отслеживание, делать все, что он хочет (положить приложение в фоновом режиме, заблокировать телефон и т. Д.), Вернуться к приложению и остановить отслеживание.iOS CoreLocation в фоновом режиме

Я хочу, чтобы отслеживание перезапустилось, если приложение было убито (системой или пользователем). Для этого я видел в документе, что я должен использовать значительную услугу изменения местоположения, но эта служба не отправляет достаточно мест. Возможно ли перезапустить стандартную службу определения местоположения при перезапуске приложения благодаря значительному сервису изменения местоположения? Или приложение будет отклонено?

ответ

0

следующие методы просыпался приложения, даже если будет убит в фоновом режиме:

  1. Регион события
  2. Посещение событий
  3. Значимые события расположение

Ваше приложение будет запущено с ключ местоположения в методе applicationDidFinishLaunchingWithOptions. Вот пример того, как справиться с этим изящно (от http://nshipster.com/launch-options/):

// .h 
@import CoreLocation; 

@interface AppDelegate() <CLLocationManagerDelegate> 
@property (readwrite, nonatomic, strong) CLLocationManager *locationManager; 
@end 

// .m 
- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // ... 

    if (![CLLocationManager locationServicesEnabled]) { 
     [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Location Services Disabled", nil) 
            message:NSLocalizedString(@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled.", nil) 
            delegate:nil 
          cancelButtonTitle:NSLocalizedString(@"OK", nil) 
          otherButtonTitles:nil] show]; 
    } else { 
     self.locationManager = [[CLLocationManager alloc] init]; 
     self.locationManager.delegate = self; 
     [self.locationManager startMonitoringSignificantLocationChanges]; 
    } 

    if (launchOptions[UIApplicationLaunchOptionsLocationKey]) { 
     [self.locationManager startUpdatingLocation]; 
    } 
} 

Кроме того, вы не ограничены использованием Существенной мониторинги местоположения или мониторинга региона и т.д. Вы можете использовать различные механизмы для различных случаев применения. Например. Вы можете использовать мониторинг региона для настройки резервной области вокруг пользователя, и каждый раз, когда происходит событие выхода, ваше приложение будет разбужено клавишей location. Затем вы можете перезапустить службы определения местоположения.