CLLocationManager didUpdateLocations在后台模式

时间:2015-09-03 08:15:00

标签: swift cllocationmanager ios9 xcode7-beta5

我想使用CLLocationManager更新用户当前和背景中的当前GPS位置。 我注册了应用程序,以便在info.plist和目标功能下使用位置背景模式。 在iPhone模拟器上一切正常,但在我真正的iPhone上,当应用程序处于后台时,函数didUpdateLocations只会被调用两次。 我使用gpx文件模拟Xcode中的GPS数据。当应用程序在前台时,它可以工作,我可以在MapView上看到进度。

这是我的ViewController的代码:

lazy var locationManager: CLLocationManager! = {
    let manager = CLLocationManager()
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.delegate = self
    manager.requestAlwaysAuthorization()
    manager.pausesLocationUpdatesAutomatically = false
    //manager.distanceFilter = 250
    return manager
}()



//Location manager delegate function

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

    if(UIApplication.sharedApplication().applicationState == .Background){
        print("background call")
    }else{
        print("foreground call")
    }

    // Save GPS coordinates
    saveGpsCoordinates(locations[0])
}

我正在使用: iPhone 5和Xcode 7.0 beta 5上的IOS 9

有人知道我为什么不在我的真实设备上获得任何后台委托调用吗?

感谢。

4 个答案:

答案 0 :(得分:2)

迁移到iOS9后,我遇到了类似的问题。

如下面问题的答案所述,请确保将allowsBackgroundLocationUpdates设置为YES

allowsBackgroundLocationUpdates in CLLocationManager in iOS9

答案 1 :(得分:0)

两件事:

  1. 我在代码中的任何地方都没有看到startUpdatingLocation的来电。

  2. (假设1是正确的)您说您正在使用GPX文件来模拟位置,如果您使用GPX文件来模拟位置而不是使用locationManager来获取位置,那么如果没有调用startUpdatingLocation,则locationManager实际上并未在前台或后台运行。

答案 2 :(得分:0)

确保将pausesLocationUpdatesAutomatically设置为TRUE。因为当设置为FALSE时,您会获得更多位置更新,甚至是看起来相同的位置。

TRUE也是默认值。

答案 3 :(得分:0)

您应该在info.plist中添加NSLocationAlwaysUsageDescription。祝你好运!