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

Posted

技术标签:

【中文标题】如何在 iOS 后台保存加速度计数据?【英文标题】:How to save accelerometer data in the background on iOS? 【发布时间】:2016-06-15 13:33:04 【问题描述】:

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

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

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

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

Stack Overflow 上的其他答案各不相同,从说根本不可能,到说使用位置更新很容易 - 知道我在这里缺少什么吗?

App Store 上有一些应用程序,例如 Moves 和 Human,它们可以在没有 M7/M8 运动协处理器的 iPhone 上运行 - 有人知道这些是如何工作的吗?

【问题讨论】:

【参考方案1】:

如果您还没有,请查看最新的后台执行文档,因为它们非常明确地说明了在应用不活动时如何进行处理,包括什么是允许的,什么是不允许的。

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

您可以接近您想要的唯一方法是在后台启用标准定位服务,使用高精度(例如desiredAccuracy = kCLLocationAccuracyBest)。高精度将在大多数情况下保持更新,而不是用户静止不动。您应该有充分的商业理由来使用此功能,所以如果您不这样做,请提出一个。另请注意,这会严重消耗电池电量,并提前警告您的用户。

【讨论】:

谢谢!我会尝试使用 kCLLocationAccuracyBest,我会在这里发布结果 结果如何? 向上,结果如何?我也有兴趣

以上是关于如何在 iOS 后台保存加速度计数据?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 10 下后台位置和加速度计更新

在后台使用 iOS 设备的加速度计 [重复]

从后台服务启动应用程序

在加速度计数据iOS上应用傅里叶变换后如何获得正确的平均值?

在 iOS 模拟器中包含应用程序数据

如果没有 IOS 中的 VOIP,我如何让我的应用程序永远活着?