我已经阅读了许多关于地理围栏我的iOS应用程序的教程(即here),但没有提到iOS是否允许在关闭应用程序时处理任何特定于应用程序的位置数据。
例如,据我所知,当应用程序处于后台时,这些服务仍会保留(如果编码正确),但是当用户双击主页按钮并关闭应用程序时呢?可以获得位置数据吗?
答案 0 :(得分:67)
根据Apple Documentation,使用区域监控边界交叉部分:
在iOS中,您在位置管理器中注册的区域仍然存在 在您的应用程序启动之间。 如果发生区域穿越 当您的iOS应用未运行时,系统会自动唤醒它 在后台启动(或重新启动),以便它可以处理 事件即可。重新启动时,您之前配置的所有区域 在任何位置的monitoredRegions属性中都可用 你创建的经理对象。
所以是的,当系统的位置检测到您输入/退出(取决于您的设置)所需的区域时,您的应用程序将被唤醒(或重新启动!),因此即使您的应用程序当然没有运行,这也是如此。您只需要在应用程序委托中正确处理它,当重新启动应用程序时,您将在选项字典中传递UIApplicationLaunchOptionsLocationKey
键。有关详细信息,请参阅下面的文档链接。
请记住,iOS 6中不推荐使用-startMonitoringForRegion:desiredAccuracy:
方法,因此不应使用它。而是使用-startMonitoringForRegion
。
要了解如何处理您的应用在位置事件后重新启动的时间,请参阅文档here,您将看到的信息在讨论已弃用的方法但仍应相关,我相信Apple忘记在旧方法弃用旧方法时将此信息迁移到新方法。我已经向他们提交了一个关于它的错误。
<强>更新强>
Apple已根据我的错误报告更新了CLLocationManager的文档。文档现在指定应用程序在终止后启动或未启动的位置监视类型。 见Using Location Services in the Background
答案 1 :(得分:2)
某些形式的位置更新要求应用在后台运行,有些则不需要。如果您想要“常量”位置更新,那么应用程序需要在后台运行。如果您只想进行重大更改(我认为它也适用于区域监控,尽管文档不是那么明确),那么如果应用程序被终止,该应用程序将重新启动:
如果您启动此服务并且您的应用程序随后终止,则系统会在新事件到达时自动将应用程序重新启动到后台...
答案 2 :(得分:0)
如果您使用区域监控功能,即使关闭也可以以某种方式恢复您的应用,通常是通过创建本地通知,这样用户可以通过在{{1中查看选项字典来租用应用程序并执行特定任务}}
答案 3 :(得分:0)
有些服务可以重新启动该应用程序,以报告位置更新,即使该应用程序已关闭。
以下文档是有帮助的。
https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/handling_location_events_in_the_background#2865362