Saya sedang menulis aplikasi yang membutuhkan pembaruan lokasi latar belakang dengan akurasi tinggi dan frekuensi rendah . Solusinya tampaknya menjadi tugas NSTimer latar belakang yang memulai pembaruan pengelola lokasi, yang kemudian segera dimatikan. Pertanyaan ini telah ditanyakan sebelumnya:
Bagaimana cara mendapatkan pembaruan lokasi latar belakang setiap n menit di aplikasi iOS saya?
Mendapatkan lokasi pengguna setiap n menit setelah aplikasi beralih ke latar belakang
iOS Bukan masalah pengatur waktu pelacakan lokasi latar belakang biasa
Timer latar belakang iOS yang berjalan lama dengan mode latar belakang "lokasi"
Layanan latar belakang penuh waktu iOS berdasarkan pelacakan lokasi
tetapi saya belum mendapatkan contoh minimum yang berfungsi. Setelah mencoba setiap permutasi dari jawaban yang diterima di atas, saya mengumpulkan titik awal. Memasuki latar belakang:
- (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];
}
dan metode delegasi:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
Perilaku saat ini adalah bahwa backgroundTimeRemaining
penurunan dari 180 detik ke nol (saat pencatatan lokasi), dan kemudian pengendali kedaluwarsa dijalankan dan tidak ada pembaruan lokasi lebih lanjut yang dibuat. Bagaimana cara mengubah kode di atas untuk menerima pembaruan lokasi berkala di latar belakang tanpa batas waktu ?
Pembaruan : Saya menargetkan iOS 7 dan tampaknya ada beberapa bukti bahwa tugas latar belakang berperilaku berbeda: