Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios7 CMMotionActivityManager-在应用程序挂起或处于后台时接收运动活动更新_Ios7_Core Motion - Fatal编程技术网

Ios7 CMMotionActivityManager-在应用程序挂起或处于后台时接收运动活动更新

Ios7 CMMotionActivityManager-在应用程序挂起或处于后台时接收运动活动更新,ios7,core-motion,Ios7,Core Motion,我一直在测试新的运动活动管理器API(CMMotionActivityManager)。我想创建一个应用程序,当应用程序未在前台运行时,该应用程序可以从startActivityUpdatesToQueue接收和处理运动更新。当应用程序位于前台时,我正确地接收到运动更新(静止、行走、跑步、自动、未知),但一旦它进入后台(因此被挂起),应用程序就会停止接收运动更新 : 此方法异步启动对运动数据的跟踪。调用此方法后,运动活动管理器在指定队列上执行处理程序块,报告设备的当前有效运动。此后,运动活动管理

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

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

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

:

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

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

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

这不是新问题。从来没有核心运动背景使用设置。如果您的应用程序在后台运行,您可以使用Core Motion,但要使其在后台运行,您必须执行其他操作(例如,在用户将应用程序发送到后台时获取位置更新,并且您的Info.plist中列出了
位置
后台服务)


还请注意,在iOS 7中,如果您有合适的硬件,您可以使用延迟位置更新在后台定期唤醒您的应用程序。这样可以节省电源,但您的应用程序可以在后台运行,而不需要Info.plist后台服务列表。

要澄清,您的意思是启用startActivityUpdatesToQueue rig吗使用选项从DidFinishLaunching开始,例如,当应用程序进入后台时,调用StartupDating位置,后台的位置更新将触发activityUpdate?或者您是说将StartActivityUpdate放入locationManager中的队列:didUpdateLocations:?Tx@Spectravideo328我只是说你的应用程序不是r在后台运行,除非它正在运行后台(并且仅仅使用Core Motion不是这样做的方法)。好的,谢谢。所以在.plist后台模式下列出位置更新是不够的。应用程序应该在后台实际更新位置(并返回locationManager:didUpdateLocations).由于应用程序在后台运行,coremotion将跟随?正确?没错,请注意我在回答中所说的:“在用户将应用程序发送到后台时获取位置更新”。显然,过去在进入后台后可以开始获取位置更新,但现在你不能这样做。@Jackson。你找到任何解决方案或替代方案了吗?@AshokKumarS不太清楚,但我认为下面的答案可以解释这一点。你需要通过其他方式使应用程序在后台运行,然后使用Core Motion你通常是这样的。