ios - cocoa ,如何在应用程序处于后台时获得更好的 GPS 监控

标签 ios objective-c cocoa-touch gps cllocationmanager

我们已经实现了重要的位置变化监控,使用 startMonitoringSignificantLocationChanges 以及选择的后台模式中的 LocationUpdates,这使我们能够在后台获取位置

但是位置非常原始,因为 SignificantLocationChange 很少发生......

然而,我们注意到,像 Endomondo(运行应用)或 Sygic(导航应用)这样的应用可以在后台运行,但它们提供高精度的 GPS 数据……,这怎么可能?我知道您可以执行后台任务,但这可能会运行 10 分钟,但这些应用程序可以长时间提供准确的 GPS

最佳答案

有两种不同的方式来监控位置 - GPS 和 Wifi/蜂窝塔三角测量。虽然 Apple 提供了很多有关内部实现的细节,但 Core Location 框架的行为通常就像它有两个独立运行的位置管理器(GPS 和 Wifi/Cell)一样。再说一次,我并不是说这正是它在底层的实现方式,而是以这种方式看到 Core Location 框架可以解释大多数“问题”,当框架的行为不符合您的预期时就会发生这种情况。

重要的位置更改服务会激活 Wifi/Cell 位置管理器。它根本不使用 GPS 位置管理器。显着位置变化至少500米,至少5分钟。是的,即使您移动得很快,您也不应该期望位置更新频率超过每 5 分钟一次。

如果您需要“准确的 GPS 数据”,正如您的问题所暗示的那样,您必须使用 GPS 位置管理器,即标准位置更新,通过 startUpdatingLocation 方法请求。有多种方法可以通过牺牲精度来优化电池消耗,但同样,如果您需要 GPS 精度,则必须使用标准位置更新。不要在技巧上浪费时间,重要的位置更新不会为您提供当前位置 - 它监视变化,而不是用于位置读数

确保您请求后台更新(Info.plist 中的 UIBackgroundModes 键)并在您的应用在前台运行时启动标准位置更新,这样即使您的应用处于非事件状态,更新也会继续。

关于ios - cocoa ,如何在应用程序处于后台时获得更好的 GPS 监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32476644/

相关文章:

iphone - cocoa touch 的日历控件

iphone - 我在其中定义变量(15到20个变量)..Appdelegate文件或.PCH文件或在外部定义它们

ios - 按下右栏按钮项目移动左栏按钮项目

objective-c - 为什么使用字符串常量与枚举常量?

objective-c - 具有多行的 NSTextFieldCell

Objective-C block - 用作对象

ios - 随机获取 Error Domain=NSURLErrorDomain Code=-1005 “The network connection was lost.”

ios - 在 Swift 中使用引用设置 NSArray 实例

iphone - 如何在 iOS 中实现 IP 语音?

iPhone:UIScrollView 内无限循环内容