【问题标题】:How to pause (and resume) background location monitoring when low battery?电池电量不足时如何暂停(和恢复)后台位置监控?
【发布时间】:2014-08-17 20:47:30
【问题描述】:

我正在为 iOS 7.1 (iPhone) 编写一个位置跟踪应用程序,它需要在电池电量为 30% 或更低时停止或暂停后台位置监控。当电池电量改善时,位置监控应在后台恢复。我怎样才能做到这一点?我正在使用重要的位置更改更新(CLLocationManager API 方法)进行后台位置监控。

谢谢!

【问题讨论】:

标签: ios iphone cllocationmanager


【解决方案1】:

根据startMonitoringSignificantLocationChanges:的文档

如果您启动此服务并且您的应用程序随后 终止,系统自动重新启动应用程序到 新事件到达时的背景。在这种情况下,选项 传递给应用程序的字典:didFinishLaunchingWithOptions: 您的应用程序委托的方法包含密钥 UIApplicationLaunchOptionsLocationKey 来表明你的 由于位置事件而启动了应用程序。重启后, 您仍然必须配置一个位置管理器对象并调用它 方法继续接收位置事件。当你重新启动 位置服务,当前事件被传递给您的代表 立即地。此外,您所在位置的 location 属性 管理器对象甚至填充了最新的位置对象 在您开始定位服务之前。

第一步:-

所以当应用程序在后台启动时,请检查UIApplicationLaunchOptionsLocationKey的启动选项键。然后您将知道位置事件的应用程序启动原因。

应用程序在后台跟踪位置更新,已被清除, 现在已经重新启动。在这种情况下,字典包含一个 表示由于新的应用程序重新启动的键 位置事件。

第二步:- 获取电量百分比

//This will give you the battery between 0.0 (empty) and 1.0 (100% charged)
[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
float batteryLevel = [[UIDevice currentDevice] batteryLevel];

//If you want it as a percentage, you can do this:
batteryLevel *= 100;

第三步:- 检查应用程序状态(如果需要)

如果应用程序在后台,则执行下一步

[UIApplication sharedApplication].applicationState == UIApplicationStateBackground

第四步:- 停止监控重大位置变化

应用检查电池百分比,如果低于 30%,则停止监控位置更新。

如果您发现电池电量超过 30% 且未启用位置监控,则 startMonitoringLocationUpdate

此检查可以在didUpdateToLocation:fromLocation 中完成,并且可能在应用程序变为活动状态或根据您的应用程序要求。

希望这对你有帮助......!!!

【讨论】:

  • 在调用 stopMonitoringSignificantLocationChanges 或 stopUpdatingLocation 之后,如何调用 startUpdatingLocation 或 startMonitoringSignificantLocationChanges - 你是说用户应该通过设置授权位置监控?
  • @java_pill 为此,您可以使用有关电池电量的本地通知并获取该事件以重新开始该更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2010-09-19
相关资源
最近更新 更多