如何解决startMonitoringSignificantLocationChanges不是立即开始
我正在开发一个导航应用程序,所有工作都在终止,背景和前基状态下进行。 但是在一种终止状态下,startMonitoringSignificantLocationChanges不会自行处理。
问题是
- 当我启动startMonitoringSignificantLocationChanges并终止了该应用程序时,我遇到了0.5-1km之后的位置事件,因为它会从我的初始位置到我得到的第一个位置事件绘制一条直线。但是当位置事件开始时来了,一切都会顺利进行
- 当我在旅途中打开应用程序以检查我的路线状态,然后终止应用程序时,同样的问题再次发生。在0.5-1km之后,位置事件再次开始,并绘制了一条直线。
代码是直接的
significantLocationManager = CLLocationManager()
significantLocationManager?.allowsBackgroundLocationUpdates = true
significantLocationManager?.pausesLocationUpdatesAutomatically = false
significantLocationManager?.requestAlwaysAuthorization()
significantLocationManager?.startMonitoringSignificantLocationChanges()
其他情况下,我已经处理了应用程序委托中的传入位置事件以保存在数据库中。
所以问题是我应该如何处理绘制直线的情况?
解决方法
只要设备从先前的通知移开500米或更多,应用程序就会收到通知。它不应期望通知的频率超过每五分钟一次。如果设备能够从网络检索数据,则位置管理器更有可能及时传递通知。
如果您需要尽快收到位置更新,建议您将startUpdatingLocation()
与distanceFilter
中的CLLocationManager
一起使用。
您可以在后台模式下使用位置更新。来自Apple documentation:
启动重大更改位置服务时, 缓存的值可能会立即报告给您的代表。作为新 获取位置数据后,位置经理会致电您代表的 具有更新值的locationManager(_:didUpdateLocations :)方法。 locations参数始终至少包含一个位置,并且可以 包含多个。位置始终按以下顺序报告 是他们确定的,所以最近的位置始终是 数组中的最后一项,如清单2所示。
func locationManager(_ manager: CLLocationManager,didUpdateLocations locations: [CLLocation]) {
let lastLocation = locations.last!
// Do something with the location.
}
在这里,您将获得设备中的最后一个缓存位置,如果您在设备中打开了位置服务,则应该非常准确。
这是另一件事。 Apple备忘单:
重大更改位置服务需要授权。对于 更多信息请求位置服务授权。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。