iOS后台持续加速度计更新

18

在提问之前,我已经对这个话题进行了彻底的研究,但需要确保我的结论正确,并且如果正确,我希望以尽可能高效的方式实现它。

对于我的应用程序来说,每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];
}

我注意到有时在按下我的应用程序“主页”按钮后的短暂一段时间内,我的应用程序会被挂起 - 可能是因为核心位置尝试获取定位信息以提供给应用程序。

我还想知道,在通过位置更新唤醒后,如果不接收到新的位置更新,系统将在多长时间内再次将您挂起? 我是否需要尝试接收连续的位置更新(导航样式)以确保我永远不会被挂起?

请帮忙!

谢谢


可能是重复的问题:iPhone在后台收集CoreMotion数据(超过10分钟) - Matias Forbord
你找到答案了吗? - ChuckKelly
1个回答

4
考虑到这是3年前提出的问题,我将尝试给出一个适用于2017年的回答。如果您正在使用Swift,我强烈建议使用这个框架 https://github.com/MHaroonBaig/MotionKit
它可以使使用CoreMotion服务变得非常简单。可能还有其他友好的封装CoreLocation服务的库。
我发现另一个Stack Overflow的问题似乎已经使用了你的方法来劫持位置服务以在后台保持活动状态。 Run app for more than 10 minutes in background 希望这可以帮助到您。我只想提醒一点,如果在后台获取连续的加速计数据而实际上并不需要位置服务,可能会导致您的应用被拒绝上架。导航应用程序确实需要同时使用位置和加速度计数据。简单的解决方案是添加一个确实使用位置的功能,以证明在后台获取加速度计数据的合理性。无论如何,祝您好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接