iOS近乎实时地从Apple Watch获得心率

use*_*173 9 ios swift healthkit watchkit watchos-2

我需要制作一个近乎实时记录心率数据的应用程序,并尽快将此数据发送到服务器.

首先我采用了这种方法:观看os 2.0 beta:访问心率

事实上,它工作正常.HealthKit每五秒钟会有一个新的心率数据.但现在我遇到了无法与服务器同步的问题.

我的第一个方法是Watch应用程序.手表正在向服务器发送数据.这不起作用,因为一旦手表上的屏幕变黑,它就会停止发送.

我的下一个方法是每隔5秒在iPhone上查询HealthKit以获取新数据.只要应用程序位于前台,这就有效.

然后我看到有一些背景功能可以监视HealthKit本身并从后台撤消应用程序,你可以做一些事情.(enableBackgroundDeliveryForType)这似乎不适用于心率(Apple文档说的这样的事情,如步骤这不起作用,我猜心率是其中之一).

我现在被困住了.你知道怎么做吗?我需要在iPhone上每5-10秒执行一次后台任务.这似乎是不可能的

Hug*_*nso 18

UPDATE

正如@BootMaker所注意到的,Apple 在WatchOS 3中HKWorkout应用程序提供了后台模式,因此它现在正在运行.您必须运行HKWorkoutSession,即使应用程序处于后台(观看黑屏),这也会实时保持您的实时交付

最接近你将要为当手表应用程序是开放的.

我为什么说这个?

  1. 有两个HealthKit的数据库(一个在iPhone上,另一个在Apple Watch上).当它们同步是任意的并且仅由OS决定时

  2. 您最接近实时的是当您没有任何密码锁定iPhoneApple Watch中的屏幕时.无论哪种方式,都不能保证每次将新措施添加到Apple Watch的HealthKit时都会发生同步

  3. 给力的唯一方法心率传感器到实时的工作是通过锻炼观察员,而你的Apple关注的应用是在FOREGROUND.

  4. Apple Watch应用程序无法使用后台交付.

  5. 观察OS 2请求传感器每10分钟自动测量(在后台).

没有其他解决方法,如果您需要更长时间的实时,或者当用户不使用您的应用程序时,您将需要使用专门的可穿戴设备.

  • 公平地说,Apple为WatchOS 3中的HKWorkout应用程序提供了后台模式,因此它现在正在运行.您必须运行HKWorkoutSession,即使应用程序在后台(观看黑屏),这将实时保持您的心率交付 (3认同)
  • 雨果(Hugo)的答案是正确的,并揭示了Apple Watch的严重局限性,对于其他所有传感器(如加速度计)也是如此。实际上,如果没有实时传感器,现在这是个毫无用处的小工具...您必须等待新的watchOS版本或新设备,或者只是为了可穿戴设备而花一些钱。 (2认同)

nha*_*thm 14

如果有人仍然需要实时获取心率或其他数据。使用此解决方案:

  1. 开发一个苹果手表应用/扩展
  2. 在手表应用程序中,使用 HKHealthStore、HKWorkoutConfiguration、HKWorkoutSession、HKLiveWorkoutBuilder 创建锻炼。创建锻炼后,您的手表应用程序将实时获取心率。
  3. 使用手表套件与 WCSession 连接将数据发送到 iPhone 应用程序。
  4. 在 Apple Watch 和 iPhone 中启用后台模式。

我测试过,即使应用程序终止,我们仍然可以获得心率(我使用本地通知发布心率数据以进行调试)

  • @DhavalBhimani 这是我的示例:https://github.com/nhathm/swift_heart_rate_real_time/ (5认同)
  • 感谢您提供示例,@nhathm,但您忘记了在 HKObserverQuery 中调用补全,如 https://developer.apple.com/documentation/healthkit/hkhealthstore/1614175-enablebackgrounddelivery 文档中所述。 (2认同)