2014-03-28 136 views
2

我有一個應用程序,收集前景和背景中的位置數據。爲了節省電池,我想使用allowDeferredLocationUpdatesUntilTraveled屬性,如Apple Doc 中所解釋的那樣,allowDeferredLocationUpdatesUntilTraveled在前臺設置(基於時間和距離)。一旦應用程序進入後臺,我們將不會收到定期的位置更新,而是基於allowDeferredLocationUpdatesUntilTraveled接收它們。推遲在後臺位置更新

我已經實現了下面的代碼,但不推遲在後臺調用。

#pragma mark - Location Manager 
-(void) setLocationManager 
{ 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 
} 


-(void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 
{ 
    NSLog(@"didUpdateLocations"); 

    if (!deferringUpdates) 
    { 
     CLLocationDistance distance = 200; 
     NSTimeInterval time = 60; 

     [locationManager allowDeferredLocationUpdatesUntilTraveled:distance timeout:time]; 

      deferringUpdates = YES; 
     } 
} 

-(void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(NSError *)error 

{ 
    NSLog(@"didFinishDeferredUpdatesWithError"); 

} 

SetLocationManager在前臺被調用,工作正常。一旦應用程序進入後臺,我仍然會收到定期的位置更新,而不是allowDeferredLocationUpdatesUntilTraveled。

我也設置在Info.plist文件 背景下面的值取 背景更新位置 設備功能 - 位置服務

任何運氣與實施呢?

+0

'locationManager:didFinishDeferredUpdatesWithError:'方法返回的'error'的值是什麼? – LazarusX

+0

嘿@mobiletest,你能解決這個問題嗎?如果是的話,你會不會在這裏分享這個正確的答案 –

回答

1

您需要內didFinishDeferredUpdatesWithError設置deferringUpdates回NO:根據蘋果的文檔中,「委託的的LocationManager:didFinishDeferredUpdatesWithError:方法被調用每次通話時間(allowDeferredLocationUpdatesUntilTraveled)整整一次」。

因此allowDeferredLocationUpdatesUntilTraveled僅被調用一次,直到deferringUpdates爲NO。