iOS几乎实时地从Apple Watch获取心率

iOS几乎实时地从Apple Watch获取心率,ios,swift,watchkit,watchos-2,healthkit,Ios,Swift,Watchkit,Watchos 2,Healthkit,我需要制作一个几乎实时记录心率数据的应用程序,并尽快将这些数据发送到服务器 首先,我采取了这种方法: 事实上,它工作得很好。HealthKit中每五秒钟就有一次新的心率数据。但现在我有一个问题,我不能与服务器同步 我的第一个方法是手表应用程序。手表正在向服务器发送数据。这不起作用,因为一旦手表上的屏幕变黑,它就会停止发送 我的下一个方法是每五秒钟查询一次iPhone上的HealthKit以获取新数据。只要应用程序在前台,这就行了 然后我看到有一些后台功能,可以观看HealthKit本身并从后台撤

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

首先,我采取了这种方法:

事实上,它工作得很好。HealthKit中每五秒钟就有一次新的心率数据。但现在我有一个问题,我不能与服务器同步

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

我的下一个方法是每五秒钟查询一次iPhone上的HealthKit以获取新数据。只要应用程序在前台,这就行了

然后我看到有一些后台功能,可以观看HealthKit本身并从后台撤销应用程序,你可以做一些事情。(enableBackgroundDeliveryForType)这似乎对心率不起作用(苹果的文档中说,对于像步骤这样的事情,这不起作用,我想心率就是其中之一)


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

正如@BootMaker所注意到的,苹果在watchos3中为HKWorkout应用程序提供了后台模式,因此它现在可以工作了。您必须运行一个HKWorkoutSession,这样即使应用程序在后台也能实时发送您的心率(观看黑屏)

当watch应用程序打开时,您将要成为的最近的

我为什么要这样说?

  • HealthKit有两个数据库(一个在iPhone上,另一个在Apple Watch上)。当他们的同步是任意的并且只由O.S.决定时

  • 当你没有任何密码将屏幕锁定在iPhoneApple Watch中时,你将最接近实时。 无论哪种方式,都不能保证每次在苹果手表的健康套件中添加新的测量值时同步都会发生

  • 强制心率传感器实时工作的唯一方法是通过训练观察者,而您的Apple Watch应用程序处于前台

  • Apple Watch应用程序不提供后台交付

  • 观察操作系统2要求传感器至少每10分钟自动测量一次(在后台测量一次

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


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

  • 开发apple watch应用程序/扩展
  • 在watch应用程序中,使用HKHealthStore、HKWorkoutConfiguration、HKWorkoutSession、HKLiveWorkoutBuilder创建训练。创建训练后,您的手表应用程序将实时获取心率
  • 使用与WCSession的watch kit连接将数据发送到iPhone应用程序
  • 在apple watch和iPhone中启用后台模式

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

    这不会很快耗尽电池吗?我的意思是每5秒发送一次数据,否则这只是一个快速获取请求,服务器会发送一个日期、心率和网球比赛的数据,所以不会使用它long@user2529173,你认为不会花很长时间,但是,拥有数十个此类应用程序的用户必须每秒向任意服务器发送2个请求,而不保证低延迟或最佳路由,甚至不保证它们处于活动状态,请求可以轻松挂起直到超时。尝试将后台抓取与health kit结合使用,系统将决定何时允许应用程序访问web,虽然没有明确的文档记录,但我相信时间间隔将取决于应用程序的使用频率和实际执行速度,ofc在一般设备状态的基础上。该应用程序是为特殊人群设计的,大约有10人在使用它。所以我不担心这些事情。我尝试了背景提取,但似乎不起作用reliably@user2529173当数据在更新时的5秒钟间隔内可用时,是否可以使用updatehandler执行任何代码?您如何知道数据每5秒更新一次?谢谢您的回答。我一直害怕这个答案。看来这个项目不能用苹果手表完成。无论如何,谢谢你,我知道这种感觉。你将不得不转向,也许还要等待下一个版本的Watch OS。也许他们决定在手表的HealthKitHugo上增加HKObserver功能。Hugo的回答是正确的,并揭示了苹果手表的严重局限性,对于所有其他传感器(如加速计)也是如此。事实上,如果没有实时传感器,它现在是一个毫无用处的小玩意……你必须等待新的watchOS发布或新的设备,或者只需花一些钱就可以使用可穿戴设备。公平地说,苹果在watchOS 3中为HK训练应用程序提供了后台模式,所以它现在可以工作了。您必须运行HKWorkoutSession,这将保持您的心率实时传递,即使应用程序在后台(黑屏显示)@BootMaker您是对的。我会更新我的答案以备将来参考。谢谢你让我注意到这个过时的答案@RiV您有任何示例代码或参考链接吗?@DhavalBhimani这是我的示例:@nhathm,谢谢您的示例,但是您忘记调用您的HKObserverQuery中的完成,这是位于的文档中规定的必填项。