iPhone GPS开发 - 提示+技巧

时间:2009-01-28 15:39:28

标签: iphone objective-c cocoa-touch gps

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

似乎在制作合理的计步器方面,你应该过滤掉任何水平精度小于20米的读数。听起来不错吗?

网上是否有任何类型的iphone gps陷阱清单?

提前致谢。

2 个答案:

答案 0 :(得分:40)

我不知道任何具体的清单,但这里有一些你应该记住的事情:

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

根据您对应用程序的使用方式,20米是否足够准确是您可以回答的问题。测试应用程序,看它是否按照您希望的方式工作。

答案 1 :(得分:27)

Tom有一个很好的答案(我想特别注意,第一个值的通常返回可能是较旧的缓存位置)但我还有一些要添加的内容:

  • 如果您想强制它至少再向您发送一次位置更新,您可以告诉位置管理员停止并重新开始。
  • 如果您不知道,CLLocation中有便捷方法可以为您提供两个位置之间的距离。
  • 正如文档所述,您应该实现locationManager:didFailWithError:即使您没有(如果只是暂停位置管理器更新一段时间)。
  • 彻底测试用户不允许应用程序更新位置的场景!
  • 很少,很少有人可能无法获得更新(即您获得更准确的位置,然后是稍早不太准确的位置)
  • 模拟器会为您提供位置更新,但会始终将您的位置报告为Apple HQ。