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

Collecting Apple Watch accelerometer data in background

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

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

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

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

如果您的应用程序在 Dock 中,它将每小时接收最多 1 个后台刷新任务。如果您的应用程序在活动表盘上有复杂功能,您每小时最多可以获得 2 个后台刷新任务。此数字取决于电池状态、您如何使用之前的任务以及其他应用当前使用了多少任务。

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

底线: * 您可以每小时安排一次后台刷新任务 * 后台任务启动后,开始锻炼,以便应用程序在后台处于活动状态 * return 锻炼成功后尽快返回 OS 任务 * 从传感器请求加速度计数据 * 处理它注意 CPU 用法 * 发送到任何你想去的地方并完成锻炼

要检查的 WWDC16 会话:227, 235, 218