startMonitoringSignificantLocationChanges的替代方案是什么?

4

我对iPhone应用开发有一定的了解,但我正在尝试制作一个应用程序,当应用程序不在前台时,可以基本上每隔一段时间更新您的位置,以便我可以在启动应用程序时绘制一个人去过的地方的地图。我认为我可以使用startMonitoringSignificantLocationChange,因为它在应用程序处于后台时有效,但事实证明它非常不准确。我真的很想能够设置时间间隔,例如,每10分钟更新一次位置,但我不知道该怎么做。有什么想法吗?


如果你想追踪用户在启动应用程序时的位置,为什么不在应用程序启动时直接启动位置服务呢? - Jens Utbult
重点是在用户不使用应用程序时跟踪他的位置,例如当他只是带着手机四处走动时,然后当他加载应用程序时,应用程序会向他显示他所去过的地方的地图。 - evanskis
2个回答

5

请阅读苹果网站上的后台定位文档

您有一个选择,可以将您的应用程序声明为需要连续位置更新。

一个应用程序可以声明自己需要连续的后台位置更新。需要在前台和后台都要定期获取位置更新的应用程序应该在其Info.plist文件中添加UIBackgroundModes键,并将此键的值设置为包含位置字符串的数组。此选项适用于提供特定服务(例如导航服务)并始终向用户报告其位置的应用程序。应用程序的Info.plist文件中存在该键,告诉系统它应该允许应用程序根据需要在后台运行。

这将使您的应用程序能够跟踪用户的行动轨迹,但您需要知道这是最耗电的选项,通常被认为是最不理想的选项。但是,如果您要跟踪某个人的步行路线,这就是您需要做的事情。

然而,你说你只想每10分钟更新一次。在这种情况下,最好不要使用这种策略,而是使用显著位置更新。如果应用程序关闭,这些更新将重新启动您的应用程序,但正如您所说,它们不太准确。使它们更好的诀窍是在应用程序获得显著位置更新时立即开始普通位置更新,并且在应用程序再次暂停之前,您应该有足够的时间来发送更多的更新以改善您的位置。

这不会完美无缺,但比仅使用显着(即基站)变化要好。


3
你只需使用startUpdatingLocation,但请确保设置了CLLocationManager的属性:
  1. 明智地使用 distanceFilter :不要每隔X分钟检查一次位置更新,只需告诉定位管理器每200/300米更新一次(这取决于用户是步行还是驾车)。

  2. desiredAccuracy 也应设置为大约100米(查看头文件中声明的常量),这样你的应用程序就不会耗尽电池电量。

如果你的应用程序被杀死,它将不会被重新启动,但只要它保持在后台,它(即,位置管理器的委托)将继续接收locationManager:didUpdateToLocation:fromLocation:
希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接