使用HKHeartbeatSeriesSample从Apple Watch实时获取心跳数据

Figelwump

我试图实时访问从Apple Watch记录的心跳数据。借助HKWorkoutSession,我可以获取workoutBuilder didCollectDataOf每5秒带有心率(心跳/分钟)数据的回调

对于我的应用程序而言,这还不够实时,因此我正在为此目的使用新的(自iOS 13和watchOS 6.0起)HKHeartbeatSeriesSample(及相关类)。我的理解是,心跳数据的系列样本将以系列形式记录逐次测量。

我能够使API工作并获得一些数据,但不是实时的-我从以前的一些录音中获得的系列数据(不清楚是什么触发了这些录音)。

这是授权:

            let allTypes: Set<HKSampleType> = Set([
                HKObjectType.workoutType(),
                HKSeriesType.heartbeat(),
                HKObjectType.quantityType(forIdentifier: .heartRate)!,
                HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN)!,
            ])

            healthStore.requestAuthorization(toShare: allTypes, read: allTypes) { (success, error) in
                ///...
                let workoutSession = WorkoutSession(healthStore: self.healthStore)
                workoutSession.startHeartbeatSampleQuery()
            }

startHeartBeatSampleQuery

            let sortDescriptor = NSSortDescriptor(key: HKSampleSortIdentifierStartDate,
                                                  ascending: false)

            // Query for the heartbeat samples from the specified heartbeat series.
            let heartbeatSeriesSampleQuery = HKSampleQuery(sampleType: HKSeriesType.heartbeat(),
                                                           predicate: nil,
                                                           limit: HKObjectQueryNoLimit,
                                                           sortDescriptors: [sortDescriptor]) {
                (query, results, error) in

                guard let samples = results, let sample = samples.first as? HKHeartbeatSeriesSample else {
                    print("NO SAMPLES MY FRIEND")
                    return
                }

                let heartbeatSeriesQuery = HKHeartbeatSeriesQuery(heartbeatSeries: sample) {
                    (query, timeSinceSeriesStart, precededByGap, done, error) in

                    guard error == nil else {
                        print("error in HKHeartbeatSeriesQuery: \(String(describing: error))")
                        return
                    }

                    print("timeSinceSeriesStart = \(timeSinceSeriesStart), precededByGap = \(precededByGap)")

                }

                self.healthStore.execute(heartbeatSeriesQuery)
            }

            completionHandler()

            self.healthStore.execute(heartbeatSeriesSampleQuery)
        }

我从此查询中获得的系列样本:

samples: [count=41 5D4F0C84-294D-41A7-8F64-B387A8E767A3 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-18 12:12:06 -0800 - 2020-01-18 12:13:12 -0800), count=27 32B0B090-CDF8-48F5-BCF6-670982C426F3 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-15 21:38:41 -0800 - 2020-01-15 21:39:46 -0800), count=67 B485328A-3EA1-49F2-8666-75B3B2143A05 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-14 21:00:15 -0800 - 2020-01-14 21:01:17 -0800), count=48 9D550B3A-F325-4CA0-B5E7-43BA42E835ED "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-14 17:06:27 -0800 - 2020-01-14 17:07:33 -0800), count=50 278E1BF7-726B-443B-97C3-8BBA3DF06207 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-13 12:04:28 -0800 - 2020-01-13 12:05:34 -0800), count=33 1215B2C4-F168-4EAD-9C35-5F734CC29637 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-13 11:55:01 -0800 - 2020-01-13 11:56:06 -0800), count=48 EB2C64F9-9E81-4F5B-BA4A-62FA6816FE29 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-11 12:20:36 -0800 - 2020-01-11 12:21:37 -0800), count=46 515D467A-51E9-490B-8082-5C8F541A0BD7 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-11 11:01:38 -0800 - 2020-01-11 11:02:44 -0800)], sample: count=41 5D4F0C84-294D-41A7-8F64-B387A8E767A3 "Vishal’s Apple Watch" (6.1.1), "Watch3,2" (6.1.1)"Apple Watch"  (2020-01-18 12:12:06 -0800 - 2020-01-18 12:13:12 -0800)

最近的是1/18,并且与我的活动锻炼会话不对应-不管我是发起HKWorkoutSession还是在手表上手动进行锻炼,这似乎都没有改变。

但是系列中的数据正是我想要的。逐节拍数据,例如:

timeSinceSeriesStart = 1.1875, precededByGap = false
timeSinceSeriesStart = 2.046875, precededByGap = false
timeSinceSeriesStart = 2.92578125, precededByGap = false
timeSinceSeriesStart = 3.8125, precededByGap = false
...

我使用API​​的方式有误吗?还是这不是获取实时心跳数据的可行方法?

艾伦

没有一种方法比使用健身课程API所能观察到的更准确地记录心率。HKSeriesType.heartbeat()Apple Watch计算心率变异性时会记录类型的样本(请参阅样本类型heartRateVariabilitySDNN)。HRV由Apple Watch在后台定期计算。没有用于启动HRV读数的API。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Laravel中使用Ajax实时获取数据

使用 where 条件从 Firestore 实时获取数据

使用Apple Watch的iAd

Apple Watch:这是允许Apple Watch应用获取新数据的好方法吗?

从Apple Watch Complication获取核心位置数据的最佳方法?

Apple Watch中的相机实时取景

Apple Watch是否可以直接从Web服务器获取数据而无需使用iPhone作为中介?

使用Xamarin将数据从iPhone传输到Apple Watch

如何使用群组在iPhone和Apple Watch之间共享数据?

使用Core Data在Apple Watch和iPhone之间共享数据

获取使用实时数据更新的唯一行

如何使用 Javascript 从 Firebase-Database 实时获取数据

如何使用Arduino从NodeMcu中的URL获取实时数据?

dart-如何使用http.post实时获取数据?

使用axios从twilio运行时获取实时json数据

如何使用网络抓取从实时表中获取数据?

我可以开发不使用Apple Watch的使用心跳,加速度计等功能的Apple Watch应用程序吗?仅使用模拟器?

Apple Watch上的心率数据

如果您使用的是Apple Watch,是否首先需要打开Health App来同步数据,然后再打开自己的healthkit应用程序以获取最新数据?

使用Apple Watch Simulator可以录音吗?

h.264数据包可使用Apple的VideoToolbox进行“实时”播放/预览

Apple Watch Kit无法获取图像

如何使用Apple Watch的加速度计数据?

有没有办法使用健康套件读取Apple Watch运动数据?

我应该使用哪种方法将数据发送到Apple Watch并返回?

在Apple Watch应用上还原NSUserDefaults数据

从Apple Watch访问钥匙串数据

从Apple Watch共享数据到iPhone

坚持使用自定义过滤器获取实时数据的方法