我想使用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
有人知道我为什么不在我的真实设备上获得任何后台委托调用吗?
感谢。
答案 0 :(得分:2)
迁移到iOS9后,我遇到了类似的问题。
如下面问题的答案所述,请确保将allowsBackgroundLocationUpdates设置为YES
allowsBackgroundLocationUpdates in CLLocationManager in iOS9
答案 1 :(得分:0)
两件事:
我在代码中的任何地方都没有看到startUpdatingLocation
的来电。
(假设1是正确的)您说您正在使用GPX文件来模拟位置,如果您使用GPX文件来模拟位置而不是使用locationManager
来获取位置,那么如果没有调用startUpdatingLocation
,则locationManager实际上并未在前台或后台运行。
答案 2 :(得分:0)
确保将pausesLocationUpdatesAutomatically设置为TRUE。因为当设置为FALSE时,您会获得更多位置更新,甚至是看起来相同的位置。
TRUE也是默认值。
答案 3 :(得分:0)
您应该在info.plist中添加NSLocationAlwaysUsageDescription。祝你好运!