在后台收集加速度计数据

时间:2015-11-02 16:50:16

标签: ios swift accelerometer

我正在编写一个应用程序,每次手机移动时都必须进行一些计算。我已经在这里阅读了所有问题,但无法使用Accelerometer在后台收集数据(在用户离开应用程序之后)。我在Location updates中设置了Plist.info标记。这是我使用的代码:

let motionManager = CMMotionManager()

func startMotionUpdates() {
    var timestamps = [NSDate]()

    if motionManager.accelerometerAvailable {
        motionManager.accelerometerUpdateInterval = 1
        motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue(), withHandler: { (data: CMAccelerometerData?, error: NSError?) -> Void in
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                let time = NSDate(timeIntervalSince1970: data!.timestamp)
                timestamps.append(time)
                print(timestamps)
            })
        })
    }
}

我尝试了所有组合,我尝试使用CMDeviceMotion,我尝试使用CLLocationManager.startUpdatingLocation()来模拟背景活动,但没有任何效果。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

每次加速计改变时都无法唤醒。只要设备的位置使用CLLocationManager显着变化(至少几米),您就可以被唤醒,这就是" location"表示在后台模式中。

要跟踪更细粒度的运动信息,您需要让系统使用CMSensorRecorder开始记录数据,然后您可以询问数据并计算您想要的数据。但是你不会被允许在后台继续观看设备的每一个微动。这会耗费太多电池。

另请参阅CMPedometer,它更直接地解决了某些用例。

相关问题