在后台收集 Apple Watch 加速度计数据

rha*_*ing 4 ios swift watchos

我正在尝试制作一个全天分析加速度计数据的应用程序。该应用程序不一定需要持续访问加速度计数据,它只需要分析所有数据。那么,有没有办法在本地存储数据并每小时对其进行分析(如果应用程序在 Dock 中,也许)。可以在一天结束时导出和分析吗?顺便说一下,我正在用 Swift 编码。谢谢!

abj*_*ato 6

这是可能的,但相当复杂,因为 watchOS3 应用程序主要被认为是前台。

  1. 一旦您的手表应用程序请求 CoreMotion 传感器记录加速度计数据,CMSensorRecorder().recordAccelerometer(forDuration: ...)该数据将由传感器自行记录,不会对您的应用程序产生任何额外影响,并在系统中存储 3 天。
  2. 当您的应用程序有执行时间(由用户在前台打开或给定后台刷新任务)时,您可以获取数据CMSensorRecorder().accelerometerData(from: startDate, to: endDate)并对其进行处理。

最困难的是获得足够的执行时间来处理和发送将被记录的大量数据。根据您的分析方法的复杂性,您可能会遇到操作系统在后台刷新任务中没有提供足够的执行时间并且操作系统看门狗终止进程的问题。另一方面,当您的应用程序处于前台时,它仅在屏幕打开时处于活动状态,并在屏幕关闭后进入挂起状态。

如果您的应用程序在 Dock 中,它每小时最多会收到 1 个后台刷新任务。如果您的应用程序在活动表盘上出现复杂情况,您每小时最多可以获得 2 个后台刷新任务。该数字取决于电池状态、您之前使用任务的方式以及其他应用程序当前使用的任务量。

除了后台刷新任务,watchapp 只能在锻炼期间在后台工作。在这种情况下持续时间不受限制,但不能使用超过 15% 的 CPU。

底线:*您可以每小时安排一次后台刷新任务*一旦后台任务开始,开始锻炼,因此应用程序将在后台处于活动状态*锻炼成功开始后尽快将任务返回到操作系统*从传感器请求加速度计数据*处理它注意CPU使用情况*发送到您想要的任何地方并完成锻炼

要检查的 WWDC16 会话:227235218