如何在iOS后台保存加速计数据?

时间:2016-06-15 13:33:04

标签: ios swift core-motion

我正在开发一个活动识别/跟踪应用程序,为用户提供当天的统计信息和时间表。我目前有一个适用于iPhone 5S及更高版本的工作版本,它使用M7和M8动作协处理器查询过去一天或一段时间内的活动。

我现在正在尝试开发一款受旧款手机支持的版本,例如iPhone 5和5c(不带M7 / M8动作协处理器)。我的想法是将加速度计读数保存一段时间,并将它们发送到服务器进行分类,但我无法让应用程序在后台保持活动超过几分钟,以便检测并保存这些读数。

我已经使用CLLocation更新来尝试让应用程序在后台保持活动状态,但就像我们的新手机版本一样,它只会在每次更新位置时将应用程序唤醒约10秒,而不是让它在后台持续运行

我也知道可以用来注册音频或VOIP背景模式的技巧/黑客但这只会让我们的应用程序被Apple的评论系统拒绝,如果这些模式不是用于面向用户的功能。

Stack Overflow上的其他答案不同于说它根本不可能,说使用位置更新时很容易 - 任何想法我在这里缺少什么?

App Store上有应用程序,例如Moves和Human,适用于没有M7 / M8动作协处理器的iPhone - 有没有人知道这些是如何工作的?

1 个答案:

答案 0 :(得分:1)

如果您还没有,请查看最新的背景执行文档,因为它们非常清楚如何在应用未处于活动状态时进行处理,包括什么是不允许的内容。

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

您可以接近所需的唯一方法是使用高精度(例如,desiredAccuracy = kCLLocationAccuracyBest)在后台启用 标准 位置服务。除了用户静止不动之外,高精度将在大多数情况下保持更新。你应该有一个很好的商业理由来使用这个功能,所以如果你不这样做就拿出一个。另外请记住,电池耗尽严重,并提前警告用户。