【问题标题】:Location updates while app is in the background or suspended应用程序在后台或暂停时的位置更新
【发布时间】:2011-08-14 01:48:59
【问题描述】:

大家好。

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

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

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

这是正确的吗?我错过了什么吗?

感谢您的帮助。

问候, ——约翰

【问题讨论】:

    标签: iphone ios background location core-location


    【解决方案1】:

    你说对了一部分。

    如果应用在后台,并且您正在使用重大的位置更改:

    1. 应用会调用 locationManager:locationDidUpdateToLocation:fromLocation
    2. 如果应用程序在后台崩溃,它将调用 application:didFinishLaunchingWithOption: 与 UIApplicationLaunchOptionLocationKey。然后,您必须再次初始化位置管理器才能获得显着的位置更改。然后这将进入 locationManager:locationDidUpdateToLocation:fromLocation。这一步很重要

    如果应用在后台,并且您正在使用区域监控

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

    【讨论】:

    • 对。我遗漏了 locationManager:didEnterRegion。我想我放弃了区域监控,似乎不起作用。尝试了具有各种阈值的所有大小区域,似乎无法正常工作。
    • @honcheng 嗨,如果应用在后台 locationManager:didEnterRegion 会被调用吗?真的吗?我已经阅读了大量的帖子,他们都声称一旦应用程序处于后台,即使设置了区域监控,也只会调用 locationManager:locationDidUpdate:fromLocation。只是希望澄清一下,因为我想在后台设置区域监控。
    • 以下是关于如何在 iOS 7 和 8 的应用被终止/挂起时获取位置更新的解决方案:stackoverflow.com/questions/27742677/…
    【解决方案2】:

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

    如果你的locationManager使用的是startMonitoringSignificantLocationChanges方法,你只能使用密钥UIApplicationLaunchOptionsLocationKey,你不能使用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

    我写了 2 篇很长的文章来解释这 2 个场景之间的区别。上述 2 个场景的源代码也可以在 GitHub 上找到。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 它只会在后台调用这个,如果应用程序没有启动,或者已经崩溃。设备尝试重启应用,所以它只调用此方法
      猜你喜欢
      • 2014-07-12
      • 2015-05-01
      • 2017-05-30
      • 1970-01-01
      • 2015-01-15
      • 2013-10-13
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多