CoreLocation:当iPhone在重大位置变化后开启时,如何唤醒我的应用程序?

时间:2013-09-17 21:24:38

标签: iphone ios core-location

我正在尝试构建一个依赖于区域监控和重要位置更改的应用。我正在测试的具体方案是:

  1. 用户(使用我的应用)前往附近有区域的机场
  2. 由于地区违规行为,我的应用程序已成功唤醒。
  3. 他们像一个好乘客一样关掉他们的iPhone。
  4. 他们降落在一些遥远的城市
  5. 他们重新打开手机
  6. 我是否希望通过重大变更监控在后台提供新位置?一直乘坐飞机来测试这个太贵了所以我正在通过关闭手机,行驶5英里并重新开启它来进行测试。

    剧透警报!当我打开手机时,我没有得到新的位置。也许我需要开得更远,但是5英里的距离应该足以让更换电池塔......尽管电话关闭后它并没有真正改变电池塔。

2 个答案:

答案 0 :(得分:4)

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

  

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

我加粗了我认为非常重要的一部分。首先,当手机开始备份并且操作系统意识到它已经移动了很长的距离时,它不会调用locationManager:didUpdateLocations:正如我所期望的那样,它在文档中说明了。它将在后台启动应用程序,调用应用程序:didFinishLaunchingWithOptions:AppDelegate的方法。提供的NSDictionary将包含一个特殊密钥(在上面的文档中注明),告诉您它是由于位置更改而启动的。然后由你来调用locationManager:startMonitoringSignificantLocationChanges。

希望这有助于其他人。我让自己成为一个简单的小测试器应用程序,在真空中测试它,并验证它对我有用。

答案 1 :(得分:0)

如果在连接到Xcode的调试器时运行应用程序,则可以模拟位置更改。这似乎适用于模拟器或系留设备。

https://developer.apple.com/library/ios/recipes/xcode_help-debugger/articles/simulating_locations.html

相关问题