我正在尝试创建一个简单的iOS应用程序,它将在后台持续跟踪位置,并在用户进入特定区域时以高精度通知(不想使用区域监控,因为它不准确或不够快我想要的是什么。
此应用程序在前台工作正常,但一旦我进入后台它就无法正常工作。
我创建了一个测试应用来调查后台位置更新的工作原理。我创建了一个简单的应用程序,它只是在发生位置更新时打印出一条消息(到日志中)。
我看到的是,在前台模式下,更新按预期发生,但当我锁定手机并且应用程序切换到后台时,位置更新发生约30秒然后停止。 Apple文档中没有提及(我可以找到)解释这种行为。
我确保在info.plist中启用了后台处理(在“功能”中完成 - >“后台模式” - >“位置更新”)
以下是我用来测试此代码的代码:
// fibonacci is a function that returns
// a function that returns an int.
func fibonacci() func() int {
a := 0
b := 1 // declare a variable b and initialize with 1
return func() (b int) { // declare a variable b with default initialization
t := a + b // b refers to the variable defined in the return value
a = b
b = t
return
}
}
关于我可能遗失的任何想法?我尝试了不同的位置精度设置(例如BestForNavigation等)并且没有变化。
感谢。
答案 0 :(得分:2)
我认为这可能就是答案: allowsBackgroundLocationUpdates.
希望在暂停时接收位置更新的应用必须包含 应用程序中的UIBackgroundModes键(具有位置值) Info.plist文件并将此属性的值设置为true。
...
在 此属性的默认值为false。
你在设置吗?
答案 1 :(得分:2)
你必须在你的plist中添加它:
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
添加此
locationManager.allowsBackgroundLocationUpdates = true
答案 2 :(得分:0)
您可以添加以下两行以使其在后台模式下工作:
locationManager!.allowsBackgroundLocationUpdates = true
locationManager!.pausesLocationUpdatesAutomatically = false