44

我已经阅读了许多关于对我的 iOS 应用程序进行地理围栏的教程(即,此处),但没有提到 iOS 是否允许在应用程序关闭时处理任何特定于应用程序的位置数据。

例如,我知道当应用程序在后台时,这些服务仍然会持续存在(如果编码正确),但是当用户双击主页按钮并关闭应用程序时呢?还能获取位置数据吗?

4

4 回答 4

68

根据Apple 文档,在使用区域监控边界交叉部分中:

在 iOS 中,您向位置管理器注册的区域在应用程序启动之间保持不变。如果在您的 iOS 应用程序未运行时发生跨区域,系统会在后台自动将其唤醒(或重新启动),以便处理该事件。重新启动时,您之前配置的所有区域都可以在您创建的任何位置管理器对象的受监视区域属性中使用。

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

请记住,该-startMonitoringForRegion:desiredAccuracy:方法在 iOS 6 中已弃用,因此不应使用。而是使用-startMonitoringForRegion.

要了解在位置事件后重新启动您的应用程序时如何处理,请参阅此处的文档,您将看到的信息在已弃用方法的讨论中,但它仍然应该是相关的,我相信 Apple 忘记将此信息迁移到当他们弃用旧方法时的新方法。我已经向他们提交了一个关于它的错误。

更新

Apple 在我的错误报告之后更新了 CLLocationManager 的文档。文档现在指定了应用程序在终止后启动或未启动的位置监控类型。请参阅在后台使用定位服务

于 2013-06-18T16:38:03.143 回答
2

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

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

(来自CLLocationManager 文档

于 2013-06-18T16:37:25.380 回答
0

如果您使用区域监控功能,即使关闭,您也可以以某种方式恢复您的应用程序,通常通过创建本地通知,这样用户可以通过查看选项字典在应用程序中租用并执行特定任务-applicationDidFinishLaunchingWithOptions:

于 2013-06-18T16:36:20.853 回答
0

即使应用程序关闭,有些服务也会重新启动应用程序以报告位置更新。
以下文档很有帮助。 https://developer.apple.com/documentation/corelocation/getting_the_user_s_location/handling_location_events_in_the_background#2865362

在此处输入图像描述

于 2020-11-06T08:29:52.390 回答