我对iPhone应用开发有一定的了解,但我正在尝试制作一个应用程序,当应用程序不在前台时,可以基本上每隔一段时间更新您的位置,以便我可以在启动应用程序时绘制一个人去过的地方的地图。我认为我可以使用startMonitoringSignificantLocationChange,因为它在应用程序处于后台时有效,但事实证明它非常不准确。我真的很想能够设置时间间隔,例如,每10分钟更新一次位置,但我不知道该怎么做。有什么想法吗?
我对iPhone应用开发有一定的了解,但我正在尝试制作一个应用程序,当应用程序不在前台时,可以基本上每隔一段时间更新您的位置,以便我可以在启动应用程序时绘制一个人去过的地方的地图。我认为我可以使用startMonitoringSignificantLocationChange,因为它在应用程序处于后台时有效,但事实证明它非常不准确。我真的很想能够设置时间间隔,例如,每10分钟更新一次位置,但我不知道该怎么做。有什么想法吗?
请阅读苹果网站上的后台定位文档
您有一个选择,可以将您的应用程序声明为需要连续位置更新。
一个应用程序可以声明自己需要连续的后台位置更新。需要在前台和后台都要定期获取位置更新的应用程序应该在其Info.plist文件中添加UIBackgroundModes键,并将此键的值设置为包含位置字符串的数组。此选项适用于提供特定服务(例如导航服务)并始终向用户报告其位置的应用程序。应用程序的Info.plist文件中存在该键,告诉系统它应该允许应用程序根据需要在后台运行。
这将使您的应用程序能够跟踪用户的行动轨迹,但您需要知道这是最耗电的选项,通常被认为是最不理想的选项。但是,如果您要跟踪某个人的步行路线,这就是您需要做的事情。
然而,你说你只想每10分钟更新一次。在这种情况下,最好不要使用这种策略,而是使用显著位置更新。如果应用程序关闭,这些更新将重新启动您的应用程序,但正如您所说,它们不太准确。使它们更好的诀窍是在应用程序获得显著位置更新时立即开始普通位置更新,并且在应用程序再次暂停之前,您应该有足够的时间来发送更多的更新以改善您的位置。
这不会完美无缺,但比仅使用显着(即基站)变化要好。
startUpdatingLocation
,但请确保设置了CLLocationManager
的属性:
明智地使用 distanceFilter
:不要每隔X分钟检查一次位置更新,只需告诉定位管理器每200/300米更新一次(这取决于用户是步行还是驾车)。
desiredAccuracy
也应设置为大约100米(查看头文件中声明的常量),这样你的应用程序就不会耗尽电池电量。
locationManager:didUpdateToLocation:fromLocation:
。