我正在编写一个iOS应用程序,要求在收到推送通知时更新设备的GPS位置。
我使用一个闭包来获取当前的GPS位置。当应用程序位于前台时,此代码运行完美(“新远程通知”和“获取位置”都打印到控制台),但当应用程序在后台时,只有“新远程通知”(并且没有位置错误)打印到控制台。因此,此时我没有设备的GPS位置,这对我的应用程序的功能非常重要。
非常感谢任何帮助。 感谢。
我在Info.plist文件中有“必需的背景模式”;
App registers for location updates
App downloads content from the network
App downloads content in response to push notifications
我的应用程序也可以随时访问位置,包括后台(在代码中的其他位置成功测试):NSLocationAlwaysUsageDescription位于Info.plist文件中
在我的AppDelegate文件中:
func application(application: UIApplication!, didReceiveRemoteNotification userInfo:NSDictionary!) {
println("New remote notification")
var notification:NSDictionary = userInfo as NSDictionary
var loc: LocationManager?
loc = LocationManager()
loc!.fetchWithCompletion {location, error in
// fetch location or an error
if let myloc = location {
var lat = myloc.coordinate.latitude as Double
var lon = myloc.coordinate.longitude as Double
println("Got location")
} else if let err = error {
println(err.localizedDescription)
}
loc = nil
}
}
答案 0 :(得分:1)
如果应用不在前台,请务必请求一点时间使用beginBackgroundTaskWithExpirationHandler
完成请求,然后在完成后致电endBackgroundTask
。
有关更多信息,请参阅适用于iOS的应用程序编程指南的Background Execution章节中的执行有限长度任务。