2013-11-03 41 views
1

我想在iOS7中使用這種技術來獲取每x秒的位置 - Periodic iOS background location updates定期的背景位置 - 使用期望的精度和距離過濾器

在我didUpdateLocations:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    [self.locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer]; 
    [self.locationManager setDistanceFilter:9999]; 
} 

當我運行此,我似乎得到一個循環。 setDesiredAccuracy: - 我認爲這會迫使更新本身,在變化。這就是爲什麼我得到一個循環,這是對的嗎?當我評論這些,它就像我期望的那樣。無論如何,當我設置這些時,阻止它獲取位置?

+0

你正在服用的做法是錯誤的歸因於iOS的7 一些變化在多任務處理,你期待這種做法是行不通的:1)增加distanceFilter屬性的值沒有按」不會導致電池節省,因爲GPS仍然需要繼續計算您的位置。 2)在iOS 7中,背景時間不連續。 3)您可能會考慮重要的更改位置服務。 4)除了你在iOS 7中的營養,你不能啓動UIBackgroundModes - 位於你需要放置'secondsSinceLastResetOfAccuracy * -1'的if條件中的背景 – aMother

回答

0

聽起來像你應該設置某種時間/日期戳記你多久打電話「setDesiredAccuracy」。如果您只撥打一次,請不要在某段時間再次撥打電話。

類似:

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    NSTimeInterval secondsSinceLastResetOfAccuracy = [lastResetTime timeIntervalSinceNow]; 
    if(secondsSinceLastResetOfAccuracy > 60 * 60) // one hour 
    {  
     [self.locationManager setDesiredAccuracy:kCLLocationAccuracyKilometer]; 
     [self.locationManager setDistanceFilter:9999]; 
     lastResetTime = [NSDate date]; // new "time stamp" 
    } 
} 
+0

的位置。根據這個場景,我認爲'secondsSinceLastResetOfAccuracy'將是一個負值,如果條件永遠不會滿足,如果我們不乘以'-1'。我的意思是當變量'lastResetTime'來自過去'timeIntervalSinceNow'時將返回負值的秒數。 –