CLActivityType 值之间的差异 - iOS SDK

Posted

技术标签:

【中文标题】CLActivityType 值之间的差异 - iOS SDK【英文标题】:Difference between CLActivityType values - iOS SDK 【发布时间】:2016-01-03 02:51:43 【问题描述】:

这些值有什么区别:

CLActivityTypeAutomotiveNavigation,
CLActivityTypeFitness,
CLActivityTypeOtherNavigation,

当分配给CLLocationManageractivityType 属性时?

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

引用自文档:

CLActivityTypeAutomotiveNavigation

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

CLActivityTypeFitness

[...]此活动可能会导致位置更新 仅当用户没有移动很长的距离时才暂停 一段时间。

CLActivityTypeOtherNavigation

仅当车辆在一段时间内没有移动很长的距离时,此活动可能会导致位置更新暂停。

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

文档来源:

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

【问题讨论】:

【参考方案1】:

似乎activityType 仅在监控位置时影响电池性能。特别是当它暂停轮询位置时。

会暂停轮询

AutomotiveNavigation - 很久没有完全移动了。

OtherNavigation(例如船/火车)- 很长时间没有移动很多

Fitness - 在较短的时间内没有太大的移动。

Other - 大概不会停止轮询。

原因

对于船只或火车,它们可能已经停止,但您仍可能在其中四处走动,因此您并不真正关心这些小更新。

为了健身,您可能已经停止了跑步,但您仍在屋内四处走动……您并不想一直消耗电池电量。

其他说明

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

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

【讨论】:

对我来说还是不太清楚。例如,当我使用 AutomotiveNavigation 时,位置会在停止移动一段时间后停止更新。那么我再次移动后它会恢复更新吗?【参考方案2】:

activityType 不仅会影响 Robert 的回答和 Apple 官方文档中指定的电池寿命,还可能会影响返回的坐标在某些条件下“捕捉”到最近道路的方式。

简而言之,如果您没有使用“其他导航”类型的活动,并且位置变化很快(= 您在车辆上的速度足够快),并且您的手机能够通过某种方式获取所需的信息互联网或本地缓存,经理报告的位置将不准确,因为它们会被“捕捉”到最近的道路。

自 iOS 6 以来的所有 iOS 版本都报告了此问题。如果在整个系统上运行的位置管理器的任何实例设置了活动,则似乎也会出现此问题不是“其他导航”的类型:请注意,该属性的默认值为“其他”,与“其他导航”不同。

一些参考资料:

关于 *** 的另一篇文章:Control iOS gps input 一篇博文:http://regex.info/blog/2016-01-19/2666 一个没有答案的openradar问题:https://openradar.appspot.com/radar?id=6056041628303360 还有一个:http://openradar.appspot.com/radar?id=2245401

【讨论】:

以上是关于CLActivityType 值之间的差异 - iOS SDK的主要内容,如果未能解决你的问题,请参考以下文章

如何找到两个时间之间的差异? [复制]

可视化两个数值数组之间的差异

C# 中的 ++i 和 i++ 之间是不是存在性能差异?

试图计算最小值与单元格中每个值之间的差异

GCC:两个相似循环之间的向量化差异

计算滚动窗口中第一个值和最后一个值之间的差异