在后台运行时访问iOS中的加速度计

时间:2015-03-09 12:26:49

标签: ios iphone ios8 iphone-6

我是iOS编程的新手。我想在后台运行时编写一个可以持续访问加速度计和iPhone 6气压传感器的应用程序。

在我的研究中,我发现人们已经使用位置更新后台模式完成了这项工作,但这只在应用程序暂停之前工作了10分钟(在iOS 6中更改为3分钟?)。我还读到了使用播放静音的音频背景模式作为解决该时间限制的方法。这似乎是一个不合标准的解决方案。

我想知道像Sleep Cycle这样的应用程序是如何做到这一点的,因为它似乎必须能够持续访问加速度计。

1 个答案:

答案 0 :(得分:1)

可以使用CoreMotion框架完成。 您必须导入CoreMotion框架,然后导入#import <CoreMotion/CoreMotion.h>中的appdelegate

此处motionManagerCMMotionManager的对象。

xData, yData, zData是存储加速度计数据的双倍值。

if (motionManager ==nil) {
    motionManager= [[CMMotionManager alloc]init];
}
[motionManager startAccelerometerUpdates];

[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
    xData = accelerometerData.acceleration.x;
    yData = accelerometerData.acceleration.y;
    zData = accelerometerData.acceleration.z;
}];

您必须在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

中执行此操作

然后,您可以在xData, yData, zData对象的任何位置使用appdelegate的这些值,即使在后台也是如此。