【问题标题】:CLLocationManager trueHeading is -1CLLocationManager trueHeading 为 -1
【发布时间】:2013-04-23 06:03:51
【问题描述】:

我在使用 CLLocationManager 时遇到问题。

我正在使用startUpdatingLocation 方法及其委托方法

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading

我收到了newHeading.trueHeading

问题是 newHeading.trueHeading 有时会返回 -1,一旦设备开始返回 -1,它就会保持不变,这意味着它总是返回 -1。

谁能告诉我这个问题的技术细节和解决方法。

在探索 Apple 的文档时,我发现了

"A negative value means that the reported heading is invalid, which can occur when the device is uncalibrated or there is strong interference from local magnetic fields."

但没有信息如何避免或解决方法。

注意:我正在真实设备 iPhone 4、iPhone 4S、iPad 2 和 iPad 3 上测试此应用。

【问题讨论】:

    标签: iphone cllocationmanager


    【解决方案1】:

    如果您发现 .magneticHeading 的航向有效(0 到 360)但 .trueheading 的值无效 (-1),则这通常意味着用户已关闭以下设置:

    隐私/位置/系统服务/指南针校准

    将其重新打开可以解决问题。

    您还可以检查 Apple 的指南针应用设置,看看它是否启用了“使用正北”设置。当罗盘校准设置被禁用时,该设置也被禁用。

    唉,Apple 没有提供任何方法来测试这一点,除了观察磁航向可用而真航向不可用,然后假设这一定是因为用户禁用了罗盘校准设置。

    【讨论】:

      【解决方案2】:

      但没有信息如何避免或解决方法。

      在这种情况下,iOS 想要显示一个校准对话框,如果您不禁止该对话框。用户通过进行 8 字形动作校准设备后,该标题将生效。

      如果由于存在永久强磁场(例如在汽车内部)而无法使用,则根本没有机会获得磁航向。

      在这种情况下,您可以考虑使用位置管理器中的 location.course,它给出了用户移动的方向,由 GPS 测量。

      【讨论】:

      • 现在我正在使用委托方法 locationManagerShouldDisplayHeadingCalibration。实现这一点并显示用户校准屏幕是否足以解决这个问题?这是解决这个问题的标准方法吗?
      【解决方案3】:

      您可以使用CLHeading 属性沿 X、Y 和 Z 轴检索原始磁值。这些值以微特斯拉为单位进行测量,并归一化为 Apple 声明的 -128 到 128 范围。每个轴值代表与设备内置磁力计跟踪的磁场线的偏移量。

      查看此链接了解更多信息。books

      希望对你有所帮助...

      【讨论】:

      • 这如何回答 OP 问题?
      • @AlexWien 在这里我只是提供一些我得到的信息,而且我有一个链接描述了一些关于 CLHeading 的信息,所以我用它的链接发布这个答案......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多