【发布时间】:2017-07-17 14:33:46
【问题描述】:
我想在后台跟踪用户位置,目的是在他靠近他的一位朋友时向他显示警报。
所以我从CLLocationManager 开始。据我所知,即使用户重新启动 Iphone 或终止应用程序,它们也是让应用程序了解位置更新的唯一一种可靠方法:startMonitoringSignificantLocationChanges。但问题是,即使在一个有很多 wifi 的城市内,startMonitoringSignificantLocationChanges 会在用户移动 1 公里左右时触发 DidUpdateLocations,这对我的需求来说实在是太多了
另一方面,startUpdatingLocation 以良好的间隔触发DidUpdateLocations(甚至太多,因为即使用户不移动它也经常触发DidUpdateLocations)。但是startUpdatingLocation 无法在 iphone 重新启动或应用程序被用户杀死后存活下来。另外我怀疑即使精度为 100m,startUpdatingLocation 也会消耗大量电池。
所以问题是:我可以在我的应用中使用什么策略来有效地跟踪而不会消耗太多电池全时用户位置?我需要大约 100m 的精度,如果可能的话,每条轨道的间隔在 2.5 到 5 分钟之间(我没有找到任何选项来指定在捕捉新位置之前等待的延迟)
其实我想这样做:
- 2
locationManager、1 GPS 和 1 重大变化 - 当应用启动时,我使用 significantChangesLocationManager:
startMonitoringSignificantLocationChanges和startMonitoringVisits - 我还调用 GPSLocationManager
startUpdatingLocation来检索准确的用户位置。我设置了PausesLocationUpdatesAutomatically(true),以便 GPSLocationManager 迟早会自行停止 -
DidUpdateLocations由 GPSLocationManager 提出,我开始使用 significantChangesLocationManager 监控区域进入/退出(获得的纬度/经度周围 100 米半径)
您如何看待这种策略?
【问题讨论】:
-
@GIJOW:这个问题与每 n 分钟一次的后台位置更新不同,例如,它们不是关于电池消耗的词,这是我首先关心的问题。所以请删除重复的链接
-
这就是为什么“可能重复”而不是“重复”
-
aah 好的,所以我在这里添加完整的注释,以免破坏问题:这个问题与stackoverflow.com/questions/41014848/… 不同,例如,它们不是关于电池消耗的词,这是我首先关心的,也不重启系统。这个问题是关于计时器并将其作为后台任务,我认为这是一个非常糟糕的策略。所以请删除可能的重复链接。 .. 无论如何,现在你知道它甚至不可能是重复的 ;)
-
在这个中,没有关于应用程序被杀死或系统重启的消息:(
标签: ios core-location cllocationmanager