在提问之前,我已经对这个话题进行了彻底的研究,但需要确保我的结论正确,并且如果正确,我希望以尽可能高效的方式实现它。
对于我的应用程序来说,每5秒钟或更快地接收加速度计更新非常重要。如果没有这个功能,这个应用程序就没有什么用处。
那么,如何实现?基本策略是使用以下方法:
[cmMotionManager startDeviceMotionUpdatesToQueue:...]
使用适当的deviceMotionUpdateInterval
,然后以某种方式“确保”您的应用程序永远不会被挂起,即您必须实现其中一种后台模式(例如位置、背景音频、VOIP等)。
许多已经在应用商店上有这种策略的应用程序,例如Sleep Cycle(“声音记录”)、Nike+和Pacer(声音播放)。
(如果有其他持续获取加速度计信息的方法,请纠正我。)
我的问题是,我的应用程序不会记录声音,不需要VOIP等,也不需要iOS 7中的任何新后台获取/远程通知API。那么如何确保我在后台保持活动状态?
嗯,既然我正在设计一个测量运动的应用程序,那么接收位置信息并不算太难。我的问题是如何以最有效的方式实现位置更新,同时确保我的应用程序从不被挂起,尽管我根本不需要这些位置更新?
这是我在我的应用委托中目前所拥有的:
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
- (void)applicationWillResignActive:(UIApplication *)application
{
[self.locationManager startUpdatingLocation];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[self.locationManager stopUpdatingLocation];
}
我注意到有时在按下我的应用程序“主页”按钮后的短暂一段时间内,我的应用程序会被挂起 - 可能是因为核心位置尝试获取定位信息以提供给应用程序。
我还想知道,在通过位置更新唤醒后,如果不接收到新的位置更新,系统将在多长时间内再次将您挂起? 我是否需要尝试接收连续的位置更新(导航样式)以确保我永远不会被挂起?
请帮忙!
谢谢