2013-03-29 31 views
0

我有一個應用程序,它使用CLLocationManager跟蹤用戶的路線,沿着所採取的路徑繪製點。應用程序使用所需的背景模式>應用程序寄存器進行位置更新,並在後臺運行CLLocationManager停在後臺

據我所知,後臺發生的任何事情都需要從locationManager:didUpdateToLocation:fromLocation調用,因爲這是每次更新位置時調用的方法。

我遇到的問題是,有時這停止調用。當用戶的位置在15分鐘左右的空間內變化不大時,似乎會發生這種情況。據我所知,電話locationManager:didUpdateToLocation:fromLocation只是停止,大概是爲了節省電池。不幸的是,當你回來時它不會再恢復。

我認爲有沒有辦法來覆蓋這種行爲,所以我想使用通知中心通知用戶該應用程序不再記錄路線。問題是,應用程序如何知道這件事發生了?如果locationManager:didUpdateToLocation:fromLocation未被調用,我無法激發我的通知。如果它被調用,通知不應該觸發。

+1

我有這個確切的問題。當用戶在15分鐘內沒有移動,並且他在保持應用在後臺時再次開始移動時,不會調用locationManager:didUpdateLocations。如果用戶將應用程序放回到前臺,那麼調用locationManager:didUpdateLocations,但它不包含用戶開始移動和將應用程序放在前臺之間的所有之前的位置。 –

回答

1

我不認爲有任何方法可以通知位置經理已經停止向您發送活動,但有一種方法可以防止它發生。在iOS 6中,添加了一項新功能,允許位置管理器在不認爲正在使用的情況下關閉服務。如果你做到以下幾點,位置管理器將繼續向您發送事件背景,直到電池耗盡:

如果([self.locationManager respondsToSelector:@selector(pausesLocationUpdatesAutomatically)]){ 自我 。 locationManager.pausesLocationUpdatesAutomatically = NO; }

此外,在iOS6的,你應該使用locationManager:didUpdateLocations:作爲locationManager:didUpdateToLocation:fromLocation:已被棄用。

+0

因此,當位置管理器檢測到用戶不移動時,它會暫停位置更新。當用戶再次移動時,位置管理器恢復檢測?但這只是當應用程序在前臺。什麼時候該應用程序在後臺?根據我的經驗,當地點經理暫停時,用戶再次開始移動時不會恢復。 –

0

的2委託方法:

-(void)locationManagerDidPauseLocationUpdates:(CLLocationManager *)manager 

-(void)locationManagerDidResumeLocationUpdates:(CLLocationManager *)manager 

告訴你什麼時候該位置更新停止和啓動由於暫停。