Я пишу програму, яка вимагає оновлення фонового розташування з високою точністю та низькою частотою . Рішенням, здається, є фонове завдання NSTimer, яке запускає оновлення диспетчера місцезнаходжень, а потім негайно вимикається. Це питання вже задавали раніше:
Як отримати фонове оновлення місцезнаходження кожні n хвилин у моїй програмі iOS?
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 із фонового завдання