【问题标题】:Alternative to startMonitoringSignificantLocationChanges?startMonitoringSignificantLocationChanges 的替代方案?
【发布时间】:2011-06-20 09:34:40
【问题描述】:

我在某种程度上是 iPhone 应用程序开发的初学者,但我正在尝试制作一个应用程序,当它不在前台时,它基本上会每隔一段时间更新一次你的位置,这样我就可以映射一个人在什么时候去过的地方他/她启动一个应用程序。我以为我可以使用 startMonitoringSignificantLocationChange,因为当应用程序在后台时它可以工作,但事实证明这是非常不准确的。我真的很希望能够设置一个时间间隔,例如,每 10 分钟更新一次位置,但我不知道如何去做。有什么想法吗?

【问题讨论】:

  • 如果您想跟踪用户在启动应用时的位置,为什么不在应用启动时启动定位服务?
  • 重点是在用户不在应用程序时跟踪用户的位置,例如,当他只是把手机放在口袋里四处走动时,应用程序会向他显示他所在位置的地图当他加载它时。

标签: iphone background location


【解决方案1】:

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

您可以选择将您的应用声明为需要持续更新位置。

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

这将产生理想的结果,即您的应用将能够跟踪用户的行走位置,但是您需要注意这是最耗电的选项,并且通常被认为是最不理想的选项。但是,如果您尝试跟踪某人的步行,这就是您需要做的事情。

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

它不会是完美的,但它会比仅仅使用重大(例如手机信号塔)的变化更好。

【讨论】:

    【解决方案2】:

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

    1. 明智地使用distanceFilter:与其每 X 分钟检查一次位置更新,不如告诉位置管理器每 200/300 米更新一次(取决于您的用户是步行还是开车)。

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

    如果您的应用被终止,将不会重新启动,但只要它停留在后台,它(即位置管理器的代表)将继续接收locationManager:didUpdateToLocation:fromLocation:

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 2015-03-03
      • 2015-09-25
      • 2019-12-16
      • 2015-11-03
      • 2014-04-03
      • 2011-12-13
      • 2014-02-28
      相关资源
      最近更新 更多