OStack程序员社区-中国程序员成长平台

标题: ios - 采用什么策略在后台监控用户位置? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 02:12
标题: ios - 采用什么策略在后台监控用户位置?

我想在后台跟踪用户位置,以便在他靠近他的一位 friend 时向他显示警报。

所以我从 CLLocationManager 开始。据我所知,即使用户重新启动 Iphone 或终止应用程序,它们也是让应用程序了解位置更新的唯一一种可靠方法:startMonitoringSignificantLocationChanges。但问题是,即使在一个有很多 wifi 的城市内,startMonitoringSignificantLocationChanges 会在用户移动 1 公里左右时触发 DidUpdateLocations,这对我的需求来说实在是太多了

另一方面,startUpdatingLocation 以良好的间隔触发 DidUpdateLocations(甚至太多,因为即使用户不移动它也会经常触发 DidUpdateLocations)。但是 startUpdatingLocation 在 iphone 重新启动或应用程序被用户杀死后无法生存。另外我怀疑即使精度为 100m,startUpdatingLocation 也会消耗大量电池。

所以问题是:我可以在我的应用中使用什么策略来有效地跟踪,而不会消耗太多电池全时用户位置?我需要大约 100m 的精度,如果可能的话,每条轨道的间隔在 2.5 到 5 分钟之间(我没有找到任何选项来指定在捕捉新位置之前等待的延迟)

其实我想这样做:

您如何看待这种策略?



Best Answer-推荐答案


即使您会收到比您需要的更多的触发器,正如您已经说过的,您可以使用 startMonitoringSignificantLocationChanges。它以非常节能的方式实现。它允许应用程序被终止,并且只有在 iOS 认为设备发生重大移动时才会再次被唤醒。另一个优点是您的应用不需要 location 后台模式,这可能会在应用审核期间提出问题。

startUpdatingLocation 让应用程序不断更新设备的位置,即使您只收到几个 didUpdateLocations: 事件。此外,iOS 在更新期间无法关闭应用程序,因此会消耗大量电池。

您也可以考虑使用地理围栏,在当前位置周围设置导出地理围栏。但是,重要的位置更新将更加可靠。一旦您已经离开地理围栏,退出地理围栏将不再触发,当手机在地理围栏内关闭并在外面重新打开时,可能会发生这种情况。此解决方案具有不需要后台模式的相同优点。

据我了解您的用例,startMonitoringSignificantLocationChanges 听起来是最佳选择。您无法控制它触发的确切时间间隔和距离,但它非常节能且易于使用。

关于ios - 采用什么策略在后台监控用户位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45147002/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4