iOS – closures应用程序时的CoreLocation和geofencing

我已经阅读了很多有关geofencing我的iOS应用程序的教程(即这里 ),但没有提到iOS是否允许在应用程序closures时处理任何特定于应用程序的位置数据。

例如,我明白,当应用程序在后台,这些服务将仍然存在(如果编码正确),但如何当用户双击主页button,closures应用程序? 位置数据仍然可以获得?

根据Apple文档 ,在“ 使用区域监控边界过境”部分中:

在iOS中,您在位置pipe理器中注册的区域会在您的应用程序启动之间持续存在。 如果在您的iOS应用程序未运行时发生区域交叉,系统会自动在后台将其唤醒(或重新启动),以便处理该事件 。 重新启动时,先前configuration的所有区域都可在您创build的任何位置pipe理器对象的monitoredRegions属性中使用。

所以是的,当系统的位置检测到你input/退出(取决于你的设置)所需的区域时,你的应用程序将被唤醒(或重新启动!),所以这是即使你的应用程序没有运行。 您只需要在应用程序委托中正确处理它,当应用程序重新启动时,您将在选项字典中传递一个UIApplicationLaunchOptionsLocationKey键。 详细信息请参阅下面的文档链接

请记住,在iOS 6中不推荐使用-startMonitoringForRegion:desiredAccuracy:方法,因此不应使用它。 而是使用-startMonitoringForRegion

要知道如何处理你的应用程序重新启动后,一个位置事件,请参阅文档在这里 ,你将看到的信息是在讨论的弃用方法,但它应该仍然是相关的,我相信苹果忘了把这个信息迁移到当他们反对旧的方法的新方法。 我已经向他们提出了一个错误。

UPDATE

苹果已经更新了我的错误报告后的CLLocationManager的文档。 文档现在指定应用程序在终止后是否启动的位置监视types。 请参阅在后台使用位置服务

某些forms的位置更新需要应用程序在后台运行,有些则不需要。 如果你想“不变”的位置更新,那么应用程序需要在后台运行。 如果您只需要进行重大更改(我认为它也适用于区域监控,尽pipe文档不太明确),那么如果应用程序终止,应用程序将重新启动:

如果您启动此服务,并且您的应用程序随后终止,则系统会自动将应用程序重新启动到后台,如果新事件到达…

(来自CLLocationManager docs )

如果使用区域监视function,即使closures,也可以以某种方式恢复应用程序,通常通过创build本地通知,通过这种方式,用户可以在应用程序中进行租用并执行特定任务,方法是通过在-applicationDidFinishLaunchingWithOptions:查看选项字典-applicationDidFinishLaunchingWithOptions: