27

我一直在测试新的 Motion Activity Manager API ( CMMotionActivityManager)。我想创建一个应用程序,该应用程序可以startActivityUpdatesToQueue在应用程序未在前台运行时接收和处理运动更新。当应用程序处于前台时,我正确接收到运动更新(静止、步行、跑步、汽车、未知),但一旦它进入后台(因此被挂起),应用程序就停止接收运动更新。

CMMotionActivityManager 类参考:“此方法异步启动对运动数据的跟踪。调用此方法后,运动活动管理器在指定队列上执行处理程序块,报告当前对设备有效的运动。之后,运动活动管理器仅在运动数据更改时执行处理程序块。处理程序块将尽最大努力执行,并且在您的应用程序暂停时不会传递更新。如果在您的应用程序暂停时更新到达,则在它恢复执行。要获取在您的应用程序暂停时发生的所有更新,请使用该queryActivityStartingFromDate:toDate:toQueue:withHandler:方法。

我想要一种方法让我的应用程序在后台运行并接收运动数据(实时)。目前,让应用程序在后台运行的唯一方法是使用后台服务,但“运动更新”不在允许的后台服务列表中:

应用商店审查指南

2.5.4多任务应用程序只能将后台服务用于其预期目的:VoIP、音频播放、位置、任务完成、本地通知等。”

我不想一直打开位置更新 (GPS)(以节省电池)。如果我依靠持续的位置更新但关闭 GPS,该应用程序将被暂停。

请让我知道如何让我的应用程序在后台运行并接收运动活动更新。一定有办法做到这一点:我尝试了 Strava 应用程序....即使应用程序在后台,当用户暂停运行时,它也会关闭 GPS。当用户恢复运行时,它会自动打开 GPS(所有这一切都在应用程序处于后台时)......这可能意味着应用程序正在后台运行,并且即使在 GPS 关闭时也会主动接收运动活动更新。

4

1 回答 1

4

这不是一个新问题。从未有过 Core Motion 背景使用设置。如果您的应用程序在后台运行,您可以使用 Core Motion,但要使其在后台运行,您必须执行其他操作(例如,在用户将应用程序发送到后台时获取位置更新,而您在locationInfo.plist 中列出后台服务。

还要注意的是,在 iOS 7 中,如果您拥有正确的硬件,您可以使用延迟位置更新在后台定期唤醒您的应用程序。因此,您可以节省电量,但​​您的应用程序会时不时地在后台运行,而无需 Info.plist 后台服务列表。

于 2013-11-10T15:55:46.113 回答