locationManager 后台续航

Posted

技术标签:

【中文标题】locationManager 后台续航【英文标题】:locationManager background battery life 【发布时间】:2017-03-15 00:40:03 【问题描述】:

我有一个关于在使用 locationManager 时节省电池的问题。我在看这里: https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-ios/LocationBestPractices.html 和这里: http://tumblr.twicetwice.net/post/47249353501/cllocationmanager-battery-saving-tips-and-best 在许多***帖子中,但我不能使用startMonitoringSignificantLocationChanges()之类的大部分技巧,因为我经常需要高精度更新,也在后台。此外,我知道我不能在后台使用计时器来获取位置,例如每 10 秒一次。现在,如果我在特定时间不移动,我想停止获取位置更新。当我再次搬家时,我想再次获得更新。我无法使用 pausesLocationUpdatesAutomatically = true,因为我不希望用户将应用程序放回前台以更新位置。当应用程序在后台时,还有其他方法可以延长电池寿命吗?我还搜索了 CoreMotion 的示例,因为我有一个想法,如果我在特定时间内不移动,则关闭 GPS,如果加速度计检测到几步,则将其打开。但我发现这在后台也不起作用,或者有人知道如何让它工作吗?是否有更好的解决方案可以在我不移动时停止更新位置并在应用程序处于后台时在我移动时开始更新位置?如果我能提供任何建议,我将不胜感激。

顺便说一句:我是 Swift 的新手,所以也许有一些我不知道也找不到的非常简单的解决方案。

【问题讨论】:

【参考方案1】:

现在,如果我在特定时间不移动,我想停止获取位置更新。当我再次搬家时,我想再次获得更新

您可能正在描述访问监控。 — 但总的来说,连续要求高精度位置非常耗电;这就是为什么除非设备连接到电源,否则您不应该这样做。

【讨论】:

感谢您的快速回答。我不能在这里使用访问监控,因为据我所知,它只有在我在特定位置停留几分钟时才会触发。我有一个 tableView 显示距离用户不到 200 米的位置。现在,如果我距离该位置 50 米,我想收到推送通知。这一切都在工作,但它有很多电池消耗。我知道高精度位置更新会耗尽电池电量。正因为如此,我想在用户不移动时节省一点电量,当应用程序在后台时也是如此。你知道这是否可能吗?

以上是关于locationManager 后台续航的主要内容,如果未能解决你的问题,请参考以下文章

locationManager.location 返回 nil

android.location.LocationManager.PASSIVE_PROVIDER 是啥意思?

我如何知道LocationManager GPS检索的提供者?

Android之LocationManager

NSTimer 在后台模式下使用 locationManager 委托(“作弊方式”)SWIFT

无法在后台服务中使用 LocationManager 获取位置