Я пишу приложение, которое требует обновлений фонового местоположения с высокой точностью и низкой частотой. Решение кажется фоновой задачей 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, и, как представляется, есть некоторые доказательства того, что фоновые задачи ведут себя по-другому:
Запустить диспетчер местоположений в iOS 7 из фоновой задачи