我一直在测试新的 Motion Activity Manager API ( CMMotionActivityManager
)。我想创建一个应用程序,该应用程序可以startActivityUpdatesToQueue
在应用程序未在前台运行时接收和处理运动更新。当应用程序处于前台时,我正确接收到运动更新(静止、步行、跑步、汽车、未知),但一旦它进入后台(因此被挂起),应用程序就停止接收运动更新。
CMMotionActivityManager 类参考:“此方法异步启动对运动数据的跟踪。调用此方法后,运动活动管理器在指定队列上执行处理程序块,报告当前对设备有效的运动。之后,运动活动管理器仅在运动数据更改时执行处理程序块。处理程序块将尽最大努力执行,并且在您的应用程序暂停时不会传递更新。如果在您的应用程序暂停时更新到达,则在它恢复执行。要获取在您的应用程序暂停时发生的所有更新,请使用该queryActivityStartingFromDate:toDate:toQueue:withHandler:
方法。
我想要一种方法让我的应用程序在后台运行并接收运动数据(实时)。目前,让应用程序在后台运行的唯一方法是使用后台服务,但“运动更新”不在允许的后台服务列表中:
“ 2.5.4多任务应用程序只能将后台服务用于其预期目的:VoIP、音频播放、位置、任务完成、本地通知等。”
我不想一直打开位置更新 (GPS)(以节省电池)。如果我依靠持续的位置更新但关闭 GPS,该应用程序将被暂停。
请让我知道如何让我的应用程序在后台运行并接收运动活动更新。一定有办法做到这一点:我尝试了 Strava 应用程序....即使应用程序在后台,当用户暂停运行时,它也会关闭 GPS。当用户恢复运行时,它会自动打开 GPS(所有这一切都在应用程序处于后台时)......这可能意味着应用程序正在后台运行,并且即使在 GPS 关闭时也会主动接收运动活动更新。