我正在尝试构建一个依赖于区域监控和重要位置更改的应用。我正在测试的具体方案是:
我是否希望通过重大变更监控在后台提供新位置?一直乘坐飞机来测试这个太贵了所以我正在通过关闭手机,行驶5英里并重新开启它来进行测试。
剧透警报!当我打开手机时,我没有得到新的位置。也许我需要开得更远,但是5英里的距离应该足以让更换电池塔......尽管电话关闭后它并没有真正改变电池塔。
答案 0 :(得分:4)
事实证明,在这种情况下,应用程序会以一种非常有趣的方式被唤醒。我在docMonitoringSignificantLocationChanges的文档中找到了这个段落:
如果您启动此服务并且您的应用程序随后终止,则系统会在新事件到达时自动将应用程序重新启动到后台。 在这种情况下,传递给locationManager的选项字典:didUpdateLocations:应用程序委托的方法包含密钥UIApplicationLaunchOptionsLocationKey,以指示您的应用程序是由于位置事件而启动的。重新启动后,您仍必须配置位置管理器对象并调用此方法以继续接收位置事件。重新启动位置服务时,会立即将当前事件传递给您的代理。此外,即使在启动位置服务之前,也会使用最新的位置对象填充位置管理器对象的位置属性。
我加粗了我认为非常重要的一部分。首先,当手机开始备份并且操作系统意识到它已经移动了很长的距离时,它不会调用locationManager:didUpdateLocations:正如我所期望的那样,它在文档中说明了。它将在后台启动应用程序,调用应用程序:didFinishLaunchingWithOptions:AppDelegate的方法。提供的NSDictionary将包含一个特殊密钥(在上面的文档中注明),告诉您它是由于位置更改而启动的。然后由你来调用locationManager:startMonitoringSignificantLocationChanges。
希望这有助于其他人。我让自己成为一个简单的小测试器应用程序,在真空中测试它,并验证它对我有用。
答案 1 :(得分:0)
如果在连接到Xcode的调试器时运行应用程序,则可以模拟位置更改。这似乎适用于模拟器或系留设备。