应用程序再次激活时 CLLocationManager 的奇怪行为

Posted

技术标签:

【中文标题】应用程序再次激活时 CLLocationManager 的奇怪行为【英文标题】:Odd behavior with CLLocationManager when app becomes active again 【发布时间】:2014-08-07 16:44:49 【问题描述】:

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

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

当然,可以通过忽略应用程序激活后发送的第一个位置来提出一个简单的解决方法,但这对我来说似乎有点奇怪。我想知道为什么 Apple 会这样做,以及是否有更好的方法来压制错误的位置。

【问题讨论】:

【参考方案1】:

我找到了解决方案。给定的 CLLocation 对象具有时间戳属性。当您存储应用程序最后一次激活的时间戳时,您可以丢弃所有在该时间之前具有时间戳的给定位置。

【讨论】:

【参考方案2】:

根据CLLocationManager documentation :

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

【讨论】:

以上是关于应用程序再次激活时 CLLocationManager 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

iOS applicationWillResignActive 任​​务在应用再次激活之前不会执行

应用程序从深层链接启动,然后从启动器再次激活重新启动活动

激活/停用代码

正版windows10卸载后再次安装是不是可以

Xamarin 推送通知,在应用程序激活后处理远程通知

AngularJS的ui-router第一次点击激活路由加载页面,再次点击就没用,如何实现每次点击都激活加载路由一次