我有点像iPhone应用程序开发的初学者,但我正在尝试创建一个基本上每次更新你的位置的应用程序,当它不在前台时,这样我就可以映射一个人在哪里时的位置他/她推出了一款应用。我以为我可以使用startMonitoringSignificantLocationChange,因为当应用程序在后台时它可以工作,但事实证明这是非常不准确的。我真的希望能够设置一个时间间隔,所以例如,每10分钟一次该位置将被更新,但我不知道如何去做。有什么想法吗?
答案 0 :(得分:5)
在此处阅读Apple网站上的background location documentation
您拥有的一个选项是将您的应用声明为需要连续的位置更新。
应用程序可以声明为 需要连续的背景位置 更新。需要的应用程序 定期更新,都在 前景和背景,应该添加 UIBackgroundModes的关键 Info.plist文件并设置值 这个键包含一个数组 位置字符串。这个选项是 适用于提供的应用程序 特定服务,例如导航 服务,涉及保持 用户通知他或她的位置 每时每刻。密钥的存在 在应用程序的Info.plist文件中 告诉系统它应该允许 应用程序根据需要运行 背景。
这将产生预期的结果,因为您的应用程序将能够跟踪用户走路的位置,但是您需要知道这是最耗电的选项,并且通常被认为是最不理想的选项。但是,如果你试图追踪某人的行走,那么你需要这样做。
<强>无论其即可。你说你只想每10分钟左右得到一次更新。在这种情况下,您最好不要使用此策略,而是使用重要的位置更新。如果它关闭,这些将重新启动您的应用程序,但正如您所说,它们不是非常准确。让它们变得更好的诀窍是,一旦应用程序获得重要的位置更新,就可以立即开始正常的位置更新,并且在应用程序再次暂停之前,您应该有足够的时间来改善您的位置(通过向您发送更多更新)。 / p>
它不会是完美的,但它会比使用重要(即细胞塔)变化更好。
答案 1 :(得分:3)
您可以使用startUpdatingLocation
,但只需确保设置了CLLocationManager
的属性:
明智地使用distanceFilter
:不要每隔X分钟检查位置更新,只需告诉位置管理员每200/300米更新一次(取决于您的用户是徒步还是驾驶) 。
desiredAccuracy
也应该设置为大约100米(查看头文件中声明的常量),这样你的应用就不会耗尽电池了。
如果被杀,您的应用将不会重新启动,但只要它停留在后台,它(意味着,位置管理员的代表)将继续接收locationManager:didUpdateToLocation:fromLocation:
。
希望有所帮助。