2013-10-07 18 views
21

我一直在测试新的动作活动管理器API(CMMotionActivityManager)。我想创建一个应用程序,该应用程序可以在应用程序未在前台运行时接收和处理来自startActivityUpdatesToQueue的动作更新。当应用处于前台时,我会正确接收动作更新(静止,走路,跑步,汽车,未知),但一旦它进入背景(因此被暂停),动作更新将不再被应用接收。CMMotionActivityManager - 在应用程序被暂停或在后台时接收动作活动更新

CMMotionActivityManager Class Reference: “此方法启动异步跟踪运动数据,运动活动管理器在指定的队列上执行处理程序块,报告当前对设备有效的运动,之后,运动活动管理器只有在动作数据发生变化时才执行处理程序块 处理程序块以尽力而为的方式执行,并且在您的应用程序暂停时不会传送更新如果在您的应用程序暂停时到达了更新,则会传送上次更新当您的应用程序暂停时,要获取所有更新,请使用queryActivityStartingFromDate:toDate:toQueue:withHandler:方法。“

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

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

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

预先感谢您!

+0

@Jackson。您是否找到任何解决方案或替代方案? –

+0

@AshokKumarS不是真的,但我认为下面的答案解释了它。你需要制作应用程序通过其他方式在后台运行,然后像平常一样使用Core Motion。 – Jackson

回答

2

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

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

+0

为了澄清,你的意思是启用startActivityUpdatesToQueue从didFinishLaunchingWithOptions权利,例如,当应用程序进入后台,然后调用startUpdatingLocation,并在某种程度上在后台的位置更新将触发一个activityUpdate?或者你说在locationManager中放置startActivityUpdatesToQueue:didUpdateLocations:?Tx – Spectravideo328

+0

@ Spectravideo328我只是说你的应用没有在后台运行,除非它正在运行背景(并且仅仅使用Core Motion并不是一种可以这样做的方式)。 – matt

+0

好的谢谢。所以仅以.plist背景模式列出位置更新是不够的,应用程序应该在后台实际更新位置(并返回locationManager:didUpdateLocations)。而且由于该应用程序正在后台运行,那么coremotion将会标记?正确? – Spectravideo328

相关问题