18

我正在寻找一些反馈、博客链接等,为 iPhone GPS 开发提供一些提示和技巧。我已经阅读并理解了 API,我已经启动并运行了我的演示应用程序等,但我在 iphone 上遇到了一些 gps 的“怪癖”。例如,当您的 iPhone 进入“省电”模式时,您收到的位置更新似乎要少得多。我读过你可以通过在应用程序中播放音乐来解决这个问题[不确定这是否属实]。

看来,要制作一个合理的计步器,您应该过滤掉水平精度小于 20 米的任何读数。这听起来对吗?

网络上有没有针对 iphone gps gotchas 的清单?

提前致谢。

4

2 回答 2

40

我不知道任何具体的列表,但您应该记住以下几点:

  • 您没有进行 GPS 查找。您正在执行核心位置查找。核心位置可能会或可能不会从 GPS 获取信息。很多人仍然使用没有 GPS 的 3g 之前的 iPhone,即使在 3g 手机上,GPS 在许多情况下也可能无法使用(例如,如果该人在室内)。在这些情况下,手机将尝试根据手机信号塔进行三角测量,Core Location 将返回结果。它会比 GPS 精确得多。
  • 核心位置将缓存数据。它为您的应用程序提供的第一个读数可能是旧读数,这可能准确也可能不准确,具体取决于手机是否移动。确保检查任何位置的时间戳,看看它是否来自您的应用程序启动之前。
  • 我不知道您所说的“省电”模式是什么意思,但是如果您正在考虑屏幕何时锁定/关闭,那么如果您的应用程序仍在运行,这不会阻止 Core Location 运行。相反,如果您在使用 Core Location 的应用程序运行时锁定手机,则很容易以比预期更快的速度耗尽手机的电池电量,因为手机将在新的位置数据可用时继续更新应用程序。您可以通过侦听 UIApplicationWillResignActiveNotification 来检测屏幕锁定和 UIApplicationDidBecomeActiveNotification 来检测解锁,从而在您的应用程序中避免这种情况。
  • 获得更高精确度的结果需要更多时间,因为等待的时间越长,结果就越好,直至达到极限。如果您决定需要在 N 米内,请考虑用户可能需要站在那里等待手机返回其位置的时间。

20 米是否足够准确,只有您可以回答,具体取决于您期望应用程序的使用方式。测试应用程序,看看它是否按照您希望的方式工作。

于 2009-01-28T17:21:23.543 回答
27

汤姆有一个很好的答案(我想特别指出第一个值的通常返回可能是一个较旧的缓存位置)但我还有一些东西要添加:

  • 如果您想强制位置管理器至少再向您发布一次位置更新,您可以告诉位置管理器停止并重新开始。
  • 如果您不知道,CLLocation 中有一些方便的方法可以为您提供两个位置之间的距离。
  • 正如文档所述,您应该实现 locationManager:didFailWithError: 即使您不必这样做(如果只是暂时停止位置管理器更新)。
  • 彻底测试用户不允许为您的应用程序更新位置的场景!
  • 非常非常罕见地,您可能会得到无序的更新(即,您会获得更准确的位置,然后是较早日期的稍微不太准确的位置)
  • 模拟器将为您提供位置更新,但始终会将您的位置报告为 Apple 总部。
于 2009-01-30T07:13:01.567 回答