ios - 如何在我的 iOS 应用程序中每 n 分钟更新一次后台位置?

我正在寻找一种在我的 iOS 应用程序中每 n 分钟更新一次后台位置的方法。我使用的是 iOS 4.3,该解决方案应该适用于未越狱的 iPhone。

我尝试/考虑了以下选项:

  • CLLocationManager startUpdatingLocation/startMonitoringSignificantLocationChanges:根据配置的属性,这在后台按预期工作,但似乎无法强制它每 n 分钟更新一次位置
  • NSTimer:当应用在前台运行但似乎不是为后台任务设计时可以工作
  • 本地通知:可以每 n 分钟安排一次本地通知,但无法执行某些代码来获取当前位置(无需用户通过通知启动应用程序)。这种方法似乎也不是一种干净的方法,因为这不是通知的用途。
  • UIApplication:beginBackgroundTaskWithExpirationHandler:据我了解,当应用移到后台而不是实现“long -running”后台进程。

如何实现这些定期后台位置更新?

最佳答案

我在 Apple 开发者论坛的帮助下找到了一个解决方案:

  • 指定定位背景模式
  • 使用 UIApplication:beginBackgroundTaskWithExpirationHandler:
  • 在后台创建一个 NSTimer
  • n smallerUIApplication:backgroundTimeRemaining 时,它会正常工作。当 n larger 时,location manager 应该在没有剩余时间之前再次启用(和禁用)以避免后台任务被杀死.

这是可行的,因为位置是三种允许的后台执行类型之一

注意:我在模拟器中测试它而浪费了一些时间,但它不起作用。但是,它在我的手机上运行良好。

https://stackoverflow.com/questions/6347503/

相关文章:

objective-c - 如何在标题更改时停止不需要的 UIButton 动画?

ios - 在代码中为 UIButton 设置图像

objective-c - 如何在 Objective-C 中声明类级别的属性?

ios - 从父 iOS 访问容器 View Controller

objective-c - 在 Objective-C 中 @synchronized 如何锁定/解

ios - 内部测试时 ITSAppUsesNonExemptEncryption 导出合规性?

iphone - 接收者类型 *** 例如消息是前向声明

objective-c - 迭代时从 NSMutableArray 中删除的最佳方法?

objective-c - Swift 编译器错误 : "non-modular header in

ios - 有没有办法遍历字典?