在后台连续iOS位置更新

时间:2017-09-30 01:22:27

标签: ios iphone location core-location

我正在尝试创建一个简单的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等)并且没有变化。

感谢。

3 个答案:

答案 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