我正在编写一个监控用户位置的应用程序。我有一个使用 startMonitoringSignificantLocationChanges 的 CLLocationManager 对象,因此我可以在应用程序未运行时从后台获取位置更新。我已经设置了我的应用程序 didFinishLaunchingWithOptions 所以如果我得到一个位置键我启动我的经理来获取用户的位置。一切正常,但问题是每次我从后台获取位置时,该位置的水平精度非常差。在大多数情况下,它是 1414 m。
有人知道为什么当位置来自背景时水平精度如此差吗? 我可以做些什么来在后台获得更准确的位置?
当应用程序运行时,我获得的所有位置都非常准确,只有当位置来自后台时才会发生这种情况。这与我所在城市的手机信号塔数量有关吗?我在想,也许设备不使用 wifi 节点的 gps 在后台获取位置。
无论如何,我们将不胜感激。 请分享您的想法。
谢谢!
最佳答案
CLLocationManager
返回的位置的准确性由 desiredAccuracy
决定,默认情况下为 kCLLocationAccuracyBest
,并取决于设备的可用精度。例如,如果设备的电池电量低,您可能会获得不太准确的位置,或者如果它们仍然从另一个应用程序缓存,您可能会获得更准确的位置。
但是,让您获得难以置信的精确坐标会消耗大量电池电量,并会耗尽设备的电量。后台应用程序可能仅限于低得多的精度分辨率以提高电池性能。
准确的位置需要大量电量才能使用 GPS radio ,而不太准确的位置则可以依赖附近的 wifi 热点和手机范围内的手机信号塔。
当您的应用程序从后台恢复时,系统将尝试提高您获得的结果的准确性。这是一个棘手的概念,但请看一下手机上的 map 应用程序。一开始,代表你所在位置的圆圈很大;随着系统更准确地感知您的位置,圆圈会变小。此可视化表示手机使用更多电量来获得更精确的位置。
当您的应用程序从后台恢复时,您会在 CLLocationManager
中看到类似的现象:您将获得不准确的位置并接收后续更准确的更新。
这是 Apple 在设计其 API 时必须在便利性和电池生命周期之间做出的折衷。对用户位置的第一次更新可能不会那么准确,除非他们只是使用 map 应用程序并且位置已缓存。
我能给你的最好建议是听取位置管理器的后续更新并相应地更新你的用户界面。祝你好运!
关于iphone - 从后台获取位置时 Location.HorizontalAccuracy 太差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797777/