【问题标题】:Simulating location changes for `startMonitoringSignificantLocationChanges`模拟`startMonitoringSignificantLocationChanges`的位置变化
【发布时间】:2012-01-22 10:34:30
【问题描述】:

我正在编写一个 iPhone 应用程序并使用定位服务。我在CLLocationManager 上使用startMonitoringSignificantLocationChanges 方法。 (据我了解,这是针对低功耗、低准确度的定位服务。)当我在 iOS 模拟器中构建和启动我的应用程序时,它可以很好地获取我的位置。但是,我想模拟初始修复之外的位置更新。

我确实注意到了这两个选项:

  • iOS 模拟器:调试 > 位置菜单
  • Xcode 4:产品 > 调试 > 模拟位置菜单

这两种方法都可以用于模拟初始修复。 (例如,从前者中选择“Apple”,或从后者中选择“Moscow”。)但是,对其中任何一个的后续更改都不会触发模拟应用程序中的另一个位置更新。

我希望在使用startMonitoringSignificantLocationChanges 时在模拟位置发生变化时得到通知。 (当我改用startUpdatingLocation 时,iOS 模拟器确实会生成一系列更新。)这使得测试支持定位的应用程序变得更加容易,而无需将设备带到现场。

两个问题:

  • 这两者有什么区别?
  • 如何使用 iOS 模拟器和/或 Xcode 4 来模拟一系列位置变化?

干杯。

【问题讨论】:

  • PS 我做了一些修改。标题曾经是“模拟位置:iOS 模拟器与 Xcode 4”。

标签: iphone xcode4 ios-simulator core-location


【解决方案1】:

跟进@Nevan-king 回答为什么使用startMonitoringSignificantLocationChanges时没有更新

请参阅 Apple Note func startMonitoringSignificantLocationChanges()

只要设备移动 500 米,应用就会收到通知 或更多来自其先前的通知。它不应该期望 通知的频率高于每五分钟一次。如果 设备能够从网络中检索数据,位置管理器 更有可能及时发送通知。

【讨论】:

    【解决方案2】:

    FWIW,对重大位置变化的监控几乎完全与蜂窝塔三角测量和切换相关联。在模拟器中处理这种情况的方式可能与在设备上的处理方式大不相同。即使是区域监控也可以获得 Wifi 和其他使用位置的应用程序的额外好处,以获得更频繁的更新。

    我猜这就是模拟器的工作方式,即使传入相距甚远且在逻辑上应该触发的位置,这也不是处理更新的方式。模拟器中没有信号塔切换,因此无法真正测试重大变化。

    【讨论】:

      【解决方案3】:

      如果你想制作一个轨迹,你可以创建一个带有如下航点的 GPX 文件:

      <?xml version="1.0" encoding="UTF-8"?>
      <gpx>
          <wpt lat="52.373" lon="4.871"></wpt>
          <wpt lat="52.374" lon="4.872"></wpt>
          <wpt lat="52.375" lon="4.871"></wpt>
      </gpx>
      

      将其保存为 track.gpx。注意开头不要有空格。

      当您构建并运行时,Xcode 底部有一个带有位置箭头的工具栏(类似于 iPhone 上的那个)。它用于“模拟位置”。单击此处并加载您的 GPX 文件。当您的应用在模拟器中运行时,蓝点应该四处移动。我认为没有办法控制时间,所以它每半秒左右更新一次位置。

      我可以在模拟器菜单中看到的不同之处在于您不能有自定义轨道,只有一个自定义点。我不知道为什么菜单选项不同,他们可能会在某个时候在模拟器中添加自定义轨道的选项。

      【讨论】:

      • 酷。与startUpdatingLocation 配合使用非常好。但是,使用startMonitoringSignificantLocationChanges 时,除了初始修复之外没有位置更新。
      • 也许您必须离开您正在监控的区域才能再次 ping。你看过使用 GPX 轨道的 WWDC 视频吗?他在那里使用区域监控。
      • 是的,我想模拟那个动作。 :) 很酷,也许这只是不可用。
      • 我遇到了类似的问题。不要使用 startMonitoringSignificantLocationChanges 获取更新,而 startUpdatingLocation 工作正常。
      • 您甚至可以在模拟器中使用 GPX 文件。编辑您的项目方案->选项->允许位置模拟->默认位置->选择 GPX 文件。在模拟器中运行您的应用程序并观察蓝点移动..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多