Yüksek doğruluk ve düşük sıklıkta arka planda konum güncellemeleri gerektiren bir uygulama yazıyorum . Çözüm, konum yöneticisinin güncellemelerini başlatan ve ardından hemen kapanan bir arka plan NSTimer görevi gibi görünüyor. Bu soru daha önce sorulmuştu:
İOS uygulamamda her n dakikada bir arka planda konum güncellemesi nasıl alabilirim?
Uygulama arka plana gittikten sonra her n dakikada bir kullanıcı konumu alınıyor
iOS Tipik arka planda konum izleme zamanlayıcı sorunu değil
"Konum" arka plan modu ile iOS uzun süreli arka plan zamanlayıcı
Konum izlemeye dayalı tam zamanlı iOS arka plan hizmeti
ama henüz asgari bir örnek alamadım . Yukarıda kabul edilen cevapların her permütasyonunu denedikten sonra, bir başlangıç noktası oluşturdum. Arka plana girme:
- (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];
}
ve temsilci yöntemi:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
Geçerli davranış, backgroundTimeRemaining
180 saniyeden sıfıra düşmesi (konum günlüğe kaydedilirken) ve ardından sona erme işleyicisinin yürütülmesi ve başka konum güncellemelerinin üretilmemesidir. Süresiz olarak arka planda periyodik konum güncellemelerini almak için yukarıdaki kodu nasıl değiştirebilirim ?
Güncelleme : iOS 7'yi hedefliyorum ve arka plan görevlerinin farklı davrandığına dair bazı kanıtlar var gibi görünüyor: