CLActivityType值之间的区别 - iOS SDK

10
这些值之间有什么区别:
CLActivityTypeAutomotiveNavigation,
CLActivityTypeFitness,
CLActivityTypeOtherNavigation,

什么时候要将activityType属性分配给CLLocationManager

文档建议我根据使用CLLocationManager的目的来使用它们,但没有提示确定停止位置更新的算法的差异。

文档引用:

CLActivityTypeAutomotiveNavigation

[...] 只有当车辆长时间不移动时,此活动才可能导致位置更新暂停。

CLActivityTypeFitness

[...]只有在用户一段时间内未移动显著距离时,此活动才可能导致位置更新暂停。

CLActivityTypeOtherNavigation

只有当车辆在一段时间内未移动显著距离时,此活动才可能导致位置更新暂停。

我真的看不出这些描述之间的区别。

文档来源:

https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/#//apple_ref/c/econst/CLActivityTypeOther

2个回答

6
似乎activityType只会影响在监测位置时的电池性能,具体而言是在暂停轮询位置时。

将暂停轮询位置的情况

AutomotiveNavigation - 长时间没有移动任何距离。

OtherNavigation(例如船/火车)- 长时间没有移动太多距离。

Fitness - 在较短的时间内移动不多。

Other - 可能不会停止轮询。

原因

  • 对于船或火车,它们可能已经停了下来,但是你仍然可以在里面走动,所以你并不关心这些小更新。

  • 对于健身,您可能已经停止了跑步,但是您仍然在房子里四处走动...... 您真的不想继续消耗电池。

其他注意事项

有关pausesLocationUpdatesAutomatically的文档进一步建议activityType仅确定是否应自动暂停位置更新。

通过为activityType属性分配值,可以帮助确定何时暂停位置更新。


1
对我来说还不是很清楚。例如,当我使用AutomotiveNavigation时,位置在停止移动一段时间后会停止更新。然后我再次移动时它会恢复更新吗? - Bagusflyer

5
不仅像Robert的回答和Apple官方文档所指定的那样,activityType也可能影响在某些情况下返回的坐标是如何被“捕捉”到最近的道路上的,简单来说,如果您没有使用活动类型“Other Navigation”,并且位置变化很快(=您正在快速移动的车辆上),并且通过互联网或本地缓存获取所需的信息,那么管理器报告的位置将不准确,因为它们将被"捕捉"到最近的道路上。这个问题从iOS 6开始就已经报告了所有版本的iOS。如果整个系统中的任何位置管理器实例都设置了一个不是“other navigation”的活动类型,则该问题似乎也会出现:请注意,该属性的默认值为“other”,与“other navigation”不同。参考资料如下:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接