当app再次变为活动状态时,CLLocationManager会出现奇怪的行为

时间:2014-08-07 16:44:50

标签: ios geolocation cllocationmanager

当我关闭使用位置服务的iOS应用程序(在后台运行)并再次打开它时,CLLocationManager将始终使用它在应用程序关闭之前发送的最后位置调用didUpdateLocations委托方法(或者非常接近地点)。与发送设备所在的(可能的)新位置相反。在发送第一个错误位置后的几毫秒内将发送正确的位置。

我没有在文档或网络搜索引擎中看到有关此行为的任何提及。做一个路线跟踪应用程序,这种行为会让我感到困惑,因为路线会有很大的跳跃。

当然,人们可以通过忽略应用程序变为活动状态后发送的第一个位置来提出一个简单的解决方法,但这对我来说似乎有些奇怪。我想知道为什么Apple会这样做,如果有更好的方法来压迫错误的位置。

2 个答案:

答案 0 :(得分:0)

我找到了解决方案。给定的CLLocation对象具有timestamp属性。当您存储上次应用程序生效的时间戳时,您可以丢弃在此之前具有时间戳的所有给定位置。

答案 1 :(得分:0)

根据CLLocationManager documentation :

  

“因为返回初始位置可能需要几秒钟,所以位置管理器通常会立即提供先前缓存的位置数据,然后在可用时提供更多最新的位置数据。因此,它总是一个好主意在采取任何行动之前检查任何位置对象的时间戳。如果两个位置服务同时启用,它们使用同一组委托方法传递事件。“