2016-02-19 33 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'