CMMotionActivityManager - 在应用程序暂停或后台时接收动作活动更新

时间:2013-10-07 02:16:34

标签: ios7 core-motion

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

CMMotionActivityManager Class Reference: “此方法异步启动运动数据的跟踪。在调用此方法时,运动活动管理器在指定的队列上执行处理程序块,报告对设备有效的当前运动。之后,运动活动管理器执行处理程序块仅在运动数据发生变化时。 处理程序块是在尽力而为的基础上执行的,并且在您的应用程序暂停时不会提供更新。如果您的应用程序暂停时更新了,则最后一次更新会在恢复执行时传递给您的应用。要获取暂停应用时发生的所有更新,请使用queryActivityStartingFromDate:toDate:toQueue:withHandler:方法。“

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

App Store Review Guidelines:“多任务应用程序只能将后台服务用于其预期目的:VoIP,音频播放,位置,任务完成,本地通知等。” 我不想一直有位置更新(GPS)(以节省电池)。如果我保留连续的位置更新,但关闭GPS,应用程序将被暂停。

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

提前谢谢!

1 个答案:

答案 0 :(得分:3)

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

另请注意,在iOS 7中,如果您拥有合适的硬件,则可以使用延迟位置更新在后台定期唤醒您的应用。因此,您可以节省电量,但​​您的应用程序可以在后台运行,而无需Info.plist后台服务列表。