3

CLLocationManager类文档中,我找到了这样的distanceFilter属性解释:

此属性仅与标准位置服务结合使用,在监视重大位置更改时不使用。

你能解释一下吗?

4

2 回答 2

1

In CLLocationManager,distanceFilter用于在设备移动 x 米时通知更改。默认值是kCLDistanceFilterNone:报告所有移动。

文档

在返回当前位置定位后,接收器仅在检测到用户位置发生重大变化时才生成更新事件。例如,当设备与不同的蜂窝塔相关联时,它可能会生成一个新事件。它不依赖于distanceFilter属性中的值来生成事件。

通过调用 startUpdatingLocation 方法启动标准位置服务。此服务最适合需要对位置事件的传递进行更细粒度控制的应用程序。具体来说,它会考虑 desiredAccuracy 和 distanceFilter 属性中的值来确定何时传递新事件。导航应用程序或任何需要高精度位置数据或定期更新流的应用程序都需要标准位置服务的精度。但是,这些服务通常需要启用位置跟踪硬件更长的时间,这可能会导致更高的功耗。

这就是为什么distanceFilter仅与标准位置服务结合使用而不在监视重大位置变化时使用的原因,例如。desiredAccuracyheading信息。

这是因为通常知道一个人已经移动了 x 米并不是很有用。然而,知道一个人在 y 方向上以 z 精度移动了 x 米是非常有价值的。

于 2012-06-11T05:11:22.370 回答
0

标准位置更改:使用常规 GPS 模块。电池密集型。如果locationManager您的类实例是CLLocationManager按如下方式启动服务

[locationManager startUpdatingLocation];

重大位置变化:每当无线电塔发生变化时。更适合电池。苹果并没有在官方文档中说这是关于无线电塔的变化,但显然这是苹果在新功能推出时所说的。

[locationManager startMonitoringSignificantLocationChanges];

如果您订阅重大位置更改,则该属性distanceFilter将被忽略。CLLocationManager

于 2012-08-09T20:49:00.107 回答