startMonitoringSignificantLocationChanges的替代方案?

时间:2011-02-03 01:56:54

标签: iphone background location

我有点像iPhone应用程序开发的初学者,但我正在尝试创建一个基本上每次更新你的位置的应用程序,当它不在前台时,这样我就可以映射一个人在哪里时的位置他/她推出了一款应用。我以为我可以使用startMonitoringSignificantLocationChange,因为当应用程序在后台时它可以工作,但事实证明这是非常不准确的。我真的希望能够设置一个时间间隔,所以例如,每10分钟一次该位置将被更新,但我不知道如何去做。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

在此处阅读Apple网站上的background location documentation

您拥有的一个选项是将您的应用声明为需要连续的位置更新。

  

应用程序可以声明为   需要连续的背景位置   更新。需要的应用程序   定期更新,都在   前景和背景,应该添加   UIBackgroundModes的关键   Info.plist文件并设置值   这个键包含一个数组   位置字符串。这个选项是   适用于提供的应用程序   特定服务,例如导航   服务,涉及保持   用户通知他或她的位置   每时每刻。密钥的存在   在应用程序的Info.plist文件中   告诉系统它应该允许   应用程序根据需要运行   背景。

这将产生预期的结果,因为您的应用程序将能够跟踪用户走路的位置,但是您需要知道这是最耗电的选项,并且通常被认为是最不理想的选项。但是,如果你试图追踪某人的行走,那么你需要这样做。

<强>无论其即可。你说你只想每10分钟左右得到一次更新。在这种情况下,您最好不要使用此策略,而是使用重要的位置更新。如果它关闭,这些将重新启动您的应用程序,但正如您所说,它们不是非常准确。让它们变得更好的诀窍是,一旦应用程序获得重要的位置更新,就可以立即开始正常的位置更新,并且在应用程序再次暂停之​​前,您应该有足够的时间来改善您的位置(通过向您发送更多更新)。 / p>

它不会是完美的,但它会比使用重要(即细胞塔)变化更好。

答案 1 :(得分:3)

您可以使用startUpdatingLocation,但只需确保设置了CLLocationManager的属性:

  1. 明智地使用distanceFilter:不要每隔X分钟检查位置更新,只需告诉位置管理员每200/300米更新一次(取决于您的用户是徒步还是驾驶) 。

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

  3. 如果被杀,您的应用将不会重新启动,但只要它停留在后台,它(意味着,位置管理员的代表)将继续接收locationManager:didUpdateToLocation:fromLocation:

    希望有所帮助。