CMPedometer 保存步骤时间戳
Posted
技术标签:
【中文标题】CMPedometer 保存步骤时间戳【英文标题】:CMPedometer saving steps timestamp 【发布时间】:2021-03-09 14:58:34 【问题描述】:我正在构建一个 ios 应用程序,我需要在其中保存用户执行的每个步骤的时间戳。我使用 CoreMotion CMPedometer,但 startUpdates 方法只输出用户从开始时间到结束时间执行的总步数。
我使用的解决方法是:在每个返回步骤块中,我使用 startDate 和 endDate,并计算每一步的秒数,然后使用每一步的秒数以线性方式设置每一步的时间戳。然后,我将下一个 startDate 设置为等于前一个块的 endDate。但这不是很精确,因为没有活动时不会返回任何块,从而导致错误的结果。
无论如何我可以获得确切的步数吗?或者至少是更精确的方法?
【问题讨论】:
我不明白您如何使用 pedometerUpdates 来完成这项工作。有一个历史 API (developer.apple.com/documentation/coremotion/cmpedometer/…) 可以让您查询过去的时间间隔,您可以尝试将您正在查看的时间段分成小块(比如每 10 秒?)并询问在该时间段内发生了多少步。不确定这对您来说是否足够精确? 【参考方案1】:这听起来像是经典的“栅栏问题”
假设我是一个非常缓慢的步行者。从上午 9 点到 10 点我做 4 步,然后在上午 10 点到 11 点之间什么都不做,然后从 11 点到 12 点我再做 4 步
从 9 点到 10 点:
9 10
|1|2|3|4|
步骤具有瞬时时间戳意味着什么?
第 1 步是从上午 9 点到上午 9:15,或者您可以说 9:07.5 是腿垂直的时间?或者我们是否对脚第一次接触地板的确切时间感兴趣,或者当你的腿垂直时你在你的步伐中的平均点?或者我们是否说第 1 步是从 9:00 到 9:15,或者更一般地说,我在 1 小时内完成了 4 步?这样做还有一个好处,即这些时间段是计算属性,而不是存储的日期,不会在“时间间隔中的 n 步”表示中添加任何信息。
你为什么要将下一个 startDate 设置为与前一个块的 endDate 相同 - 人们并不总是在迈出一步......我没有在上午 10 点从 11 点到 12 点开始我的第一步,我是在上午 11 点开始的,11点15分结束。
【讨论】:
我明白你在说什么,但我需要更准确。我将新的开始日期设置为之前的结束日期,以便获得更精确的值。 “默认”开始日期是您开始运行侦听器的那一刻,因此它永远不会改变。例如,假设我在 10:00 开始监听器。我会知道,例如,在 10:00 到 12:00 之间,我走了 40 步。但是如果我保存每个块的结束日期,我可以更好地了解用户如何给出他们的步骤。例如,如果在 10-11 之间他们给出了 30 步,通过保存结束日期我会知道 11-12 之间是 10 步。 啊,我明白了。如果您查询 healthkit 以获取 10:00 到 10:01 之间的步数,并且它说您在那一分钟内执行了 4 个步骤,那么这与在 10:00 到 11:00 之间查询并在一小时内获得 100 个步数的信息不同。如何将这些信息组合在一起的统计/抽样/数学问题......我不知道答案以上是关于CMPedometer 保存步骤时间戳的主要内容,如果未能解决你的问题,请参考以下文章