2016-02-19 32 views
0

我目前正在接收位置更新並希望通過api調用週期性地向服務器發送更新。啓動應用程序時一切正常,但後臺更新確實不一致。在後臺處理位置數據

這裏就是我目前正在做的事:

var lastUpdateTime: Double? 

func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) 
{ 
    userLocation = newLocation 

    if let lastUpdate = lastUpdateTime { 
     let thisUpdate = NSDate().timeIntervalSince1970 

     let timeInterval = thisUpdate - lastUpdate 

     if timeInterval > 60 { 
      if 
       let latitude = userLocation?.coordinate.latitude, 
       let longitude = userLocation?.coordinate.longitude 
      { 
       // Make API call to update location 
       lastUpdateTime = NSDate().timeIntervalSince1970 
      } 
     } 

    } else { 
     lastUpdateTime = NSDate().timeIntervalSince1970 
    } 

} 

我讀過我能找到關於後臺任務和位置更新,但說實話,我有點失落。如果有幫助的話,api調用是通過Alamofire完成的,如果這對它執行的頻率有影響的話。

編輯:

新增CLLocationManager選項...

locationManager.delegate = self 
locationManager.distanceFilter = kCLDistanceFilterNone 
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
locationManager.startUpdatingLocation() 
+0

時,應用程序將在後臺持續接收位置更新您是否正確激活了後臺位置? 您的位置上有什麼設置? (例如刷新期間) –

+0

Hi @ thibautnoah,我會用CLLocationManager選項更新OP – SimonTheEngineer

+0

這似乎很好,你能更準確地定義你所調用的不一致嗎? 我假設你的API調用是正確的,如果是這樣的問題出現在後臺更新中,你有沒有檢查過這個教程? : http://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial –

回答

0

爲了得到位置更新的背景下,應用程序應該啓用「位置更新」背景功能選項卡模式在項目設置。 除此之外,需要在info.plist文件中添加所需的背景位置密鑰(NSLocationAlwaysUsageDescription)。如果這兩件事情都正確完成,當通話'startUpdatingLocation'