在iOS后台进行连续加速度计更新

时间:2013-12-22 12:58:12

标签: ios accelerometer core-location core-motion

在提出问题之前,我已经彻底研究了这个主题,但需要确保我得出了正确的结论,如果有的话,我希望尽可能有效地帮助实现这一目标。

必不可少我的应用每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];
}

我注意到有时在我按下应用程序上的主页按钮后,我的应用程序会暂停 - 大概是当Core Location尝试获取位置修复程序以传送到应用程序时。

我还想知道,一旦您被位置更新唤醒,如果新的位置更新未到达系统,系统再次暂停您之前有多长时间?我是否必须尝试接收连续的位置更新(导航样式)以确保我永远不会被暂停?

请帮忙!

由于

1 个答案:

答案 0 :(得分:4)

考虑到这是3年前提出的问题,我将尝试给出适用于2017年的回复。如果您使用的是Swift,我强烈建议您使用此框架https://github.com/MHaroonBaig/MotionKit

使用CoreMotion服务非常简单。核心位置服务可能还有另一个友好的包装器。

我发现了另一个SO问题似乎已经使用您劫持位置服务的方法来解决这个问题,以便在后台保持活跃。

Run app for more than 10 minutes in background

希望这会有所帮助。我只是提醒一点,使用位置服务在后台获取连续的加速度计数据而不需要实际需要位置服务可能是让您的应用程序从应用程序商店中被拒绝的理由。导航应用程序真正使用位置和加速度计数据。简单的答案是添加一个实际使用位置的功能来证明在后台获取加速度计数据是正确的。祝你好运。