Ich schreibe eine Anwendung, die Aktualisierungen des Hintergrundstandorts mit hoher Genauigkeit und niedriger Frequenz erfordert . Die Lösung scheint eine NSTimer-Hintergrundaufgabe zu sein, die die Aktualisierungen des Standortmanagers startet und diese dann sofort herunterfährt. Diese Frage wurde schon einmal gestellt:
Wie erhalte ich in meiner iOS-Anwendung alle n Minuten ein Hintergrund-Standort-Update?
Abrufen des Benutzerstandorts alle n Minuten, nachdem die App in den Hintergrund geschaltet wurde
iOS Nicht das typische Problem mit dem Timer zur Verfolgung des Hintergrundstandorts
iOS-Hintergrundtimer mit langer Laufzeit und Hintergrundmodus "Standort"
iOS Vollzeit-Hintergrunddienst basierend auf Standortverfolgung
Aber ich habe noch kein Mindestbeispiel zum Laufen gebracht. Nachdem ich jede Permutation der oben akzeptierten Antworten ausprobiert hatte, stellte ich einen Ausgangspunkt zusammen. Hintergrund eingeben:
- (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];
}
und die Delegatenmethode:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
Das aktuelle Verhalten besteht darin, dass die backgroundTimeRemaining
Dekrementierung von 180 Sekunden auf Null (während der Protokollierung des Speicherorts) erfolgt und der Ablaufhandler dann ausgeführt wird und keine weiteren Standortaktualisierungen generiert werden. Wie ändere ich den obigen Code, um regelmäßig Standortaktualisierungen im Hintergrund auf unbestimmte Zeit zu erhalten ?
Update : Ich ziele auf iOS 7 ab und es scheint Hinweise darauf zu geben, dass sich Hintergrundaufgaben anders verhalten:
Starten Sie den Standort-Manager in iOS 7 über die Hintergrundaufgabe