应用在后台或暂停时位置更新

时间:2011-04-27 17:43:03

标签: iphone ios background location core-location

问候所有人。

我正在尝试在我的应用中实施重要的位置更改和区域支持。当应用程序处于活动状态时,接收位置更新显然没有问题。我的问题是如何在应用未激活时处理更新。

这是我对如果检测到重要的位置变化或区域进入/退出会发生什么的理解:

  • 如果应用程序处于后台或暂停,iOS会在我现有的位置代理上调用locationManager:didUpdateToLocation:fromLocation :(或locationManager:didEnterRegion :)。
  • 如果应用程序终止,iOS会调用application:didFinishLaunchingWithOptions:并在我的应用程序委托上使用密钥UIApplicationLaunchOptionsLocationKey。此时,我需要创建一个新的位置管理器实例来获取新位置。

这是对的吗?我错过了什么吗?

感谢您的帮助。

此致 --John

3 个答案:

答案 0 :(得分:8)

你是部分正确的。

如果应用程序处于后台,并且您正在使用重要的位置更改:

  1. 该应用将调用locationManager:locationDidUpdateToLocation:fromLocation
  2. 如果应用程序在后台崩溃,它将调用application:didFinishLaunchingWithOption:with UIApplicationLaunchOptionLocationKey。然后,您必须再次初始化位置管理器以获得重要的位置更改。然后这将进入locationManager:locationDidUpdateToLocation:fromLocation。这一步很重要
  3. 如果应用程序处于后台,并且您正在使用区域监控

    1. locationManager:locationDidUpdateToLocation:不会调用fromLocation
    2. 应用程序调用locationManager:didEnterRegion:

答案 1 :(得分:3)

当应用程序在后台时与应用程序暂停时获取位置更新是两种截然不同的方案。你将不得不以不同的方式处理它们。

如果您的UIApplicationLaunchOptionsLocationKey使用方法locationManager,则只能使用密钥startMonitoringSignificantLocationChanges,您无法使用startUpdatingLocation

时获取位置更新

A)应用程序在后台,请参阅:Background Location Services not working in iOS 7

B)应用暂停/终止,请参阅:How to Get Location Updates for iOS 7 and 8 Even when the App is Suspended

我写了两篇非常长的文章来解释这两种情况之间的差异。 GitHub上也提供了上述2场景的源代码。

答案 2 :(得分:-3)

我相信如果您的应用不在前台,它总是调用application:didFinishLaunchingWithOptions。