Я пишу приложение, которое требует обновления местоположения в фоновом режиме с высокой точностью и низкой частотой . Решением, похоже, является фоновая задача NSTimer, которая запускает обновления диспетчера местоположения, которые затем немедленно закрываются. Этот вопрос задавали раньше:
Как мне получать фоновое обновление местоположения каждые n минут в моем приложении iOS?
Получение местоположения пользователя каждые n минут после перехода приложения в фоновый режим
iOS Не типичная проблема с таймером отслеживания местоположения в фоновом режиме
Долгосрочный фоновый таймер iOS с фоновым режимом "местоположение"
Постоянная фоновая служба iOS на основе отслеживания местоположения
но мне еще предстоит получить минимальный рабочий пример . Попробовав каждую перестановку принятых выше ответов, я составил отправную точку. Ввод фона:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"ending background task");
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
self.timer = [NSTimer scheduledTimerWithTimeInterval:60
target:self.locationManager
selector:@selector(startUpdatingLocation)
userInfo:nil
repeats:YES];
}
и метод делегата:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
Текущее поведение заключается в том, что время backgroundTimeRemaining
уменьшается со 180 секунд до нуля (во время регистрации местоположения), а затем выполняется обработчик истечения срока действия, и дальнейшие обновления местоположения не генерируются. Как изменить приведенный выше код, чтобы получать периодические обновления местоположения в фоновом режиме на неопределенный срок ?
Обновление : я нацелен на iOS 7, и, похоже, есть некоторые свидетельства того, что фоновые задачи ведут себя по-другому: