-2

如果我用

[self.locationManager startUpdatingHeading];

状态栏上会出现一个箭头。

[self.locationManager startUpdatingHeading]; 

使用全球定位系统?

如果没有,为什么状态栏上会出现箭头?

注意:我已阅读文档。仅当启用位置时,才能使用真正的航向。我在想的是

  1. 启用位置
  2. 获得一次航向。
  3. 计算真航向和磁航向之间的差异。
  4. 将该数字存储在静态变量中。
  5. 禁用位置。
  6. 每次更新航向,获取磁航向,然后加上真航向和磁航向的差值。

我认为可能有用的另一件事是将位置精度设置得非常宽,以至于根本不需要 GPS。

我想知道这是否可能。例如,我们可以以编程方式禁用位置更新吗?据我所知,调用 stopUpdatingLocation 不会关闭位置更新(不再调用didUpdateToLocation,但状态栏上有一个丑陋的箭头)。

self.locationManager.locationServicesEnabled=false 不起作用,因为该属性是只读的类属性。看起来没有办法关闭 locationServices 并更新标题。我可能错了。我是吗?

基本上我想帮助我的访客在没有过多 GPS 的情况下看到方向。

4

2 回答 2

0

当然,startUpdatingHeading使用GPS。

来自CLLocationManager 类参考

在 iOS 中,具有适当硬件的设备也可以报告航向信息。当 headingAvailable 属性中的值为 YES 时,您可以使用位置管理器对象来检索标题信息。要开始传递与航向相关的事件,请将委托分配给位置管理器对象并调用位置管理器的 startUpdatingHeading 方法。如果还启用了位置更新,则位置管理器会返回真实航向和磁航向值。如果未启用位置更新,则位置管理器仅返回磁航向值。这些功能在 OS X 中不可用。

于 2013-04-21T08:20:21.803 回答
-1

定位服务旨在尽可能高效,以最大限度地减少功耗并延长电池寿命。例如,API 允许您向服务声明需要多少测量精度,因为更高的精度需要更多的硬件和功率。如果您只需要低精度(例如约 10 公里),您可以简单地使用手机信号塔获取位置信息,因为无线电已经处于活动状态,这很便宜。如果您需要比这更高的精度(例如几公里),硬件可能会使用 WiFi 热点信息切换到三角测量,这需要中等功率。但为了获得最高精度,系统将启用 GPS 单元,这会消耗更多的电量。

但是,如果您只请求航向信息,则将仅使用磁力计(只要硬件支持它;即 iPhone 4+ IIRC)。在这种情况下,GPS 单元将不会启用。根据CLLocationManager 参考

如果未启用位置更新,则位置管理器仅返回磁航向值。

至于状态栏中的箭头指示器,每当任何应用程序使用定位服务时都会显示。如果您打开内置的 Compass 应用程序,您会注意到箭头也显示在那里,即使它只管理航向数据。

Using与您的位置回调stopUpdatingLocation是分开的,stopUpdatingHeading并且只会停止调用您的位置回调,同时还会酌情关闭硬件资源。

至于locationServicesEnabled,这设置为YES是否在设备上启用了服务(由用户),这就是该字段为只读的原因。

所以,只要打电话startUpdatingHeading,只要你不打电话startUpdatingLocation,你就不用担心 GPS。您提到的步骤不是必需的,因为 CL 已经为您完成了艰苦的工作。

这些信息都包含在参考资料中:

于 2013-04-26T04:08:23.477 回答