我們iOS應用程序的一個需求是監視後臺中的位置更改。我們已經實現了「locationManager startMonitoringForRegion:region」,不幸的是,我們在徹底測試應用程序時意識到它不足以滿足我們的需求。iOS應用程序在後臺時如何確保位置的不斷更新?
然後我們使用「locationManager startUpdatingLocation」來提高位置的準確性。在前景中,一切都非常好,這個位置精度幾乎是我們想要的。
現在的問題是,當應用程序在後臺,事件「didUpdateLocations」不定期調用。我們通過查看日誌文件來觀察這一點。會發生什麼幾乎總是相同的,前15分鐘的應用程序定期更新位置,然後突然突然停止。大約5分鐘的休息之後,它繼續更新地點約15分鐘。而且這種情況也是如此。
我們可能在執行後臺處理時犯了錯誤。
UIApplication *app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask = 0;
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
if(rootViewController._selectedLocation == nil)
{
NSLog(@"selected location is nil and app entered background");
[rootViewController.locationManager stopUpdatingLocation];
}
else
{
NSLog(@"selected location is not nil and app entered background");
[rootViewController.locationManager startUpdatingLocation];
}
[app endBackgroundTask:bgTask];
}];
這似乎被稱爲每20分鐘一次,並且位置被再次更新。我們做錯了什麼?我們如何才能在不中斷的情況下定期更新位置信息?我們用iPhone 5測試了這一點,而且知道它是固定的也很重要。
你有沒有在後臺調用stopUpdatingLocation?順便說一句,我相信你不需要使用'beginBackgroundTaskWithExpirationHandler:'如果你的plist中有'location'鍵。 – progrmr
另外,你在[CLLocationManager](https://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html)上設置了activityType屬性?您是否已將'pausesLocationUpdatesAutomatically'設置爲NO? – progrmr
非常感謝,你剛剛解決了它。我將CllocationManager的pausesLocationUpdatesAutomatically設置爲否。該應用程序現在在後臺定期更新位置。是的,它看起來像beginBackgroundTaskWithExpirationHandler:沒有必要。再次感謝! – BCI