Ich entwickle eine App, die wichtige Standortänderungen überwacht, um den Standort des Benutzers im Hintergrund zu erhalten. Ich habe erfolgreich implementiert locationManager.startMonitoringSignificantLocationChanges
und die locationManager:didUpdateLocations
und locationManager:didFailWithError
Methoden meiner CLLocationManagerDelegate
.Ist es möglich, Standort-Updates zu verschieben, wenn wichtige Standortänderungen überwacht werden?
SLC ist jedoch genauer als ich brauche. Laut Apples Dokumentation - und bestätigt durch meine Tests - löst slc ungefähr alle 500 m und zwischen 5 und 10 Minuten ein Standort-Update aus. Daher habe ich locationManager.allowDeferredLocationUpdatesUntilTravelled:timeout
in der Methode didUpdateLocations
meines Delegierten implementiert, wie in diesem Handbuch beschrieben: http://apple.co/1W4gqEJ.
Hier ist mein Code:
var deferringUpdates = false
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
for location in locations {
NSLog("Significant location change recorded:\n%@", location)
}
if let location = locations.first {
let secondsAgo: NSTimeInterval = location.timestamp.timeIntervalSinceNow
// Only process the location if it is very recent (less than 15 seconds old).
if abs(secondsAgo) < 15.0 {
saveExtendedUserInfo(withLocation: location)
}
}
if !deferringUpdates {
manager.allowDeferredLocationUpdatesUntilTraveled(810, timeout: 600)
deferringUpdates = true
NSLog("Deferring location updates...")
}
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
NSLog(error.localizedDescription)
}
func locationManager(manager: CLLocationManager,
didFinishDeferredUpdatesWithError error: NSError?)
{
deferringUpdates = false
if let deferralError = error {
NSLog(deferralError.localizedDescription)
}
}
Leider ist die der Standort-Manager aufschiebt nie die Updates. Unmittelbar nachdem allowDeferredUpdatesUntilTravelled:timeout
aufgerufen wird, führt der Delegat didFinishDeferredUpdatesWithError
aus und produziert kCLErrorDomain 12
, das CLError.DeferredNotUpdatingLocation
ist.
Warum bekomme ich diesen Fehler? Es scheint zu bedeuten, dass der Service für aufgeschobene Updates die Überwachung signifikanter Standortänderungen nicht als "aktualisierenden Standort" anerkennt. Ist es möglich, die Auslieferung von SLC-Events zu verschieben oder ihre Häufigkeit zu reduzieren? Wenn das so ist, wie?
Hey. Ich implementiere die gleichen Dinge. Wie hast du das gemacht? Kannst du mir bitte dabei helfen? Wie und wo diese Methode verwenden .allowDeferredUpdatesUntilTravelled: Timeout entsprechend der Geschwindigkeit des Benutzers? – BHUMICA