Я пишу приложение, которое требует обновлений фонового местоположения с высокой точностью и низкой частотой. Решение кажется фоновой задачей NSTimer, которая запускает обновления диспетчера местоположений, которые затем немедленно закрываются. Этот вопрос был задан до:Периодические обновления местоположения фона iOS
How do I get a background location update every n minutes in my iOS application?
Getting user location every n minutes after app goes to background
iOS Not the typical background location tracking timer issue
iOS long-running background timer with "location" background mode
iOS full-time background-service based on location tracking
, но я до сих пор получить минимальный пример работающих. Пробовав каждую перестановку вышеприведенных ответов, я собрал исходную точку. Ввод фон:
- (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 секунд до нуля (при входе местоположения), а затем обработчик истечения не выполняется, и никакого дальнейшим генерируются обновления местоположения. Как изменить приведенный выше код, чтобы получать периодические обновления местоположения в фоновом режиме на неопределенный срок?
Update: Я нацеливание IOS 7 и, как представляется, некоторые доказательства того, что фоновые задачи ведут себя по-разному:
Start Location Manager in iOS 7 from background task
Вы не указываете, какую версию iOS вы настраиваете. iOS 7 (например) имеет другую систему многозадачности, чем предшественница. –
@JasonWhitehorn Хорошая точка. Я обновил вопрос. – pcoving
@pcoving: Будет ли ваше решение работать, даже если приложение будет убито или прекращено? – Nirav