在后台处理位置数据

时间:2016-02-19 12:05:56

标签: ios swift core-location

我目前正在接收位置更新,并希望通过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()

1 个答案:

答案 0 :(得分:0)

要在后台获取位置更新,应用应在项目设置的功能选项卡中启用“位置更新”后台模式。 除此之外,还需要将所需的后台位置键( NSLocationAlwaysUsageDescription )添加到info.plist文件中。如果这两件事情都正确完成,那么当调用'startUpdatingLocation'

时,app会在后台持续接收位置更新