我们在所选择的背景模式下使用startMonitoringSignificantLocationChanges
和LocationUpdates实现了重要的位置变化监视,这使我们能够在后台获得位置。
然而,的位置很原始,因为SignificantLocationChange很少发生.
然而,我们注意到,像Endomondo (运行应用程序)或Sygic (导航应用程序)这样的应用程序可以在后台运行,但它们提供高精度的GPS数据.怎么可能呢?我知道你可以做一个背景任务,但这可能会运行10分钟,但这些应用程序提供了长期精确的GPS。
发布于 2015-09-09 12:25:30
有两种不同的方法来监测位置- GPS和Wifi/蜂窝塔三角测量。虽然Apple提供了很多关于内部实现的详细信息,但核心位置框架的行为通常就好像它有两个位置管理器(GPS和Wifi/Cell)独立运行一样。同样,我并不是说这正是它是如何在引擎盖下实现的,但是看到这样的核心位置框架解释了大多数“问题”,而这些问题发生在框架的行为不是您所期望的方式的时候。
重要的位置更改服务激活Wifi/Cell位置管理器。它根本不使用GPS定位管理器。重要的位置变化是至少500米和至少5分钟。是的,即使你移动得很快,你也不应该期望位置更新超过每5分钟一次。
如果您需要“精确的GPS数据”,正如您的问题所暗示的,您必须使用GPS位置管理器,即通过startUpdatingLocation方法请求的标准位置更新。有多种方法来优化电池消耗的交易精度,但同样-如果你需要GPS精度,你必须使用标准的位置更新。不要把你的时间浪费在技巧上,重要的位置更新不会给你当前的位置--它监视changes,它不打算用于位置阅读。
确保您请求后台更新(UIBackgroundModes键在Info.plist中),并启动标准位置更新时,您的应用程序运行前景,这样的更新将继续,即使您的应用程序是不活跃的。
发布于 2015-09-09 10:18:07
来自苹果文档:
在iOS中,与应用程序相关的区域在任何时候都会被跟踪,包括当应用程序没有运行时。如果一个区域边界被跨越,而一个应用程序没有运行,该应用程序将被重新启动到后台来处理事件。类似地,如果应用程序在事件发生时被挂起,它就会被唤醒,并给出短时间(约10秒)来处理该事件。必要时,应用程序可以使用beginBackgroundTaskWithExpirationHandler: UIApplication类的方法请求更多的后台执行时间。
https://stackoverflow.com/questions/32476644
复制相似问题