我正在寻找一种在我的 iOS 应用程序中每 n 分钟更新一次后台位置的方法。我使用的是 iOS 4.3,该解决方案应该适用于未越狱的 iPhone。
我尝试/考虑了以下选项:
-
CLLocationManager startUpdatingLocation/startMonitoringSignificantLocationChanges
:这根据配置的属性按预期在后台工作,但似乎不可能强制它每 n 分钟更新一次位置
-
NSTimer
:当应用程序在前台运行时可以工作,但似乎不是为后台任务设计的
- 本地通知:可以每 n 分钟安排一次本地通知,但无法执行某些代码来获取当前位置(用户无需通过通知启动应用程序)。这种方法似乎也不是一种干净的方法,因为这不是通知应该使用的用途。
-
UIApplication:beginBackgroundTaskWithExpirationHandler
:据我了解,当应用程序移至后台时,这应该用于在后台完成一些工作(也受时间限制),而不是实现“长时间运行”的后台进程。
如何实现这些定期后台位置更新?
我在 Apple 开发者论坛的帮助下找到了实现此目的的解决方案:
- Specify
location background mode
- 创建一个
NSTimer
在背景中UIApplication:beginBackgroundTaskWithExpirationHandler:
- When
n
is smaller than UIApplication:backgroundTimeRemaining
它会工作得很好。什么时候n
is larger, the location manager
应在没有剩余时间之前再次启用(和禁用)以避免后台任务被终止。
这是可行的,因为位置是三种允许的后台执行类型之一.
注意:我在模拟器中测试它,但它不起作用,因此浪费了一些时间。不过,它在我的手机上运行良好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)