2

我想使用 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 上的 IOS 9 和 Xcode 7.0 beta 5

有人知道为什么我在真实设备上没有收到任何后台代理调用吗?

谢谢。

4

4 回答 4

2

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

如以下问题的答案所述,确保将allowBackgroundLocationUpdates 设置为YES

iOS9中CLLocationManager中的allowBackgroundLocationUpdates

于 2015-12-22T22:56:11.567 回答
0

两件事情:

  1. 我在您的代码中的任何地方都没有看到对startUpdatingLocation.

  2. (假设 1 是正确的)您说您正在使用 GPX 文件来模拟位置,如果您使用 GPX 文件来模拟位置而不是使用locationManager来获取位置,并且由于您没有调用startUpdatingLocation,因此 locationManager 实际上并没有运行在前景或背景中。

于 2015-09-04T15:11:00.213 回答
0

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

于 2017-11-02T08:34:24.927 回答
0

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

TRUE 也是默认值。

于 2015-10-07T09:50:24.210 回答