我正在尝试构建一个同时依赖区域监视和重大位置更改的应用程序。我正在测试的特定方案是:

  • 用户(使用我的应用程序)去了周围有机场的机场
  • 我的应用程序由于区域冲突而被成功唤醒...进入。
  • 他们像个小小的乘客一样关闭iPhone。
  • 他们降落在一些遥远的城市
  • 他们将电话重新打开

  • 我是否应该期望通过重大更改监视在后台提供一个新位置?一直要进行飞行测试太昂贵了,因此我通过关闭手机,行驶5英里左右然后重新打开来进行测试。

    扰流板警报!打开手机时,我没有得到新的位置。也许我需要开得更远,但是5英里应该足以应付更换手机发射塔的需求……尽管自从手机关机以来,这实际上并不是手机发射塔的更换。

    最佳答案

    事实证明,在这种情况下,应用程序以一种非常有趣的方式被唤醒。我在文档中为startMonitoringSignificantLocationChanges找到了这一段:

    如果启动此服务,并且随后终止了您的应用程序,则当新事件到来时,系统会自动将应用程序重新启动到后台。 在这种情况下,传递给应用程序委托的locationManager:didUpdateLocations:方法的选项字典包含键UIApplicationLaunchOptionsLocationKey,以指示由于位置事件而启动了您的应用程序。重新启动后,您仍然必须配置位置管理器对象并调用此方法以继续接收位置事件。 当您重新启动位置服务时,当前事件将立即传递给您的委托。此外,即使在您启动位置服务之前,也会使用最新的位置对象填充位置管理器对象的location属性。

    我已经加粗了我认为非常重要的部分。首先,当手机重新启动并且操作系统意识到它已经移动了一段很长的距离时,它不会像我期望的那样在文档中调用“locationManager:didUpdateLocations:”。它将在后台启动该应用程序,并调用AppDelegate的application:didFinishLaunchingWithOptions:方法。此处提供的NSDictionary将包含一个特殊密钥(在上面的文档中有注明),告诉您它是由于位置更改而启动的。然后由您决定再次调用locationManager:startMonitoringSignificantLocationChanges。

    希望这对其他人有帮助。我为自己制作了一个简单的小测试仪应用程序,可以在真空中进行测试,并验证了它对我有用。

    关于iphone - CoreLocation:在位置发生重大更改后打开iPhone时,如何唤醒我的应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18860162/

    10-14 22:26
    查看更多