如何轮询 CoreLocation 而不是获取更新?

Posted

技术标签:

【中文标题】如何轮询 CoreLocation 而不是获取更新?【英文标题】:How to poll CoreLocation instead of getting updates? 【发布时间】:2012-06-09 00:04:38 【问题描述】:

在带有 CoreLocation 框架(用于 GPS 跟踪)的 ios 中,我如何询问位置而不是获取持续更新。我不希望每秒钟左右调用一次 didUpdateToLocation,我只想在需要时获取位置。

谢谢!

【问题讨论】:

【参考方案1】:

我不相信有办法做到这一点。您可以只启动更新,然后在 didUpdateToLocation 中禁用它们,这样您只会得到一个。

【讨论】:

之后可以重新启动吗? 是的,它总是会在获得一个位置后关闭 您可以通过调用-startUpdatingLocation-stopUpdatingLocation 方法来启动和停止它。【参考方案2】:

定位成功后停止定位服务

【讨论】:

【参考方案3】:

你不能。硬件(收音机等)不够快。相反,您必须在需要位置之前调用 startUpdatingLocation 方法,并等待无线电获得您需要的准确修复(最初的几个位置回调可能不是很准确或不如后来的回调准确) .然后,如果您在很长一段时间内不需要位置更新,则可以停止它们,以帮助节省电池寿命。

【讨论】:

【参考方案4】:

正如我在评论中建议的那样,您可以随意使用-startUpdatingLocation-stopUpdatingLocation 的组合,如果您在收到位置更新后停止更新,除非您再次启动它,否则它将不会继续。示例如下:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

    //Store your new location before stopping updates.

    [manager stopUpdatingLocation];

现在,当您想在其他时间在应用中检索新位置时。不用担心它的更新频率,因为它只会更新一次。

[locationManager startUpdatingLocation];

希望这是有道理的,并有所帮助!

【讨论】:

【参考方案5】:

当你调用startUpdatingLocation方法时,它会先返回缓存点。因此,在委托方法didUpdateToLocation 中,您应该检查该位置的准确性。如果它不在可接受的范围内,则应忽略该位置。您应该继续获取位置,直到该点落在可接受的范围内。一旦收到这样的积分,您应该致电stopUpdatingLocation

【讨论】:

如何检查该位置的准确性? 参考***.com/questions/4635938/… 检查年龄,而不是准确性。它可能准确但旧(缓存)。 因此,您应该从函数返回而不调用 stopUpdatingLocation。一旦您收到下面的位置检查,location.horizo​​ntalAccuracy > 0 && location.horizo​​ntalAccuracy

以上是关于如何轮询 CoreLocation 而不是获取更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Xcode 10 而不是 swift 添加 CoreLocation 框架?

CoreLocation 在空闲后停止获取更新

CoreLocation 负值

CoreLocation 图标停留在状态栏中

CoreLocation 管理器不更新位置

每 10 分钟更新一次时,FCM 是不是仍然比轮询更好? [关闭]