iPhone上的Nike + GPS如何在后台接收加速度计更新?

时间:2012-01-03 17:48:19

标签: ios5 accelerometer background-process

适用于iOS 5的新型Nike + GPS应用程序能够在后台处理加速度计事件(因此可以进行室内跑步机跟踪)。这怎么可能?当我将我的应用程序放在后台时,它会停止接收事件。我使用标准的UIAccelerometer API。

2 个答案:

答案 0 :(得分:12)

为了回答这个问题,即使它已经自我回答了......

“如果您使用较新的Core Motion API,则可以在后台接收更新。”

以下是一个例子:

- (void)startAccelerationCollection {
    [self.motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init]
                                             withHandler:^(CMAccelerometerData *data, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self.accelerometerReadings addObject:data];
        });
    }];
}

答案 1 :(得分:0)

当计步器更新时,我调用方法关闭并打开GPS。对我来说,当用户按下主页并在spotify上停留一小时听音乐时,它解决了问题。

不要忘记启用项目设置 - >能力 - >背景模式 - >位置更新

    import CoreLocation
    import CoreMotion


    //turn Off and turn On GPS
    private func apelacaoRenovarGPSLigado() {

    LocationManager.sharedInstance.stopUpdatingLocation()
    let locationManager = LocationManager.sharedInstance
    locationManager.autoUpdate = true
    locationManager.startUpdatingLocationWithCompletionHandler { (location, status, verboseMessage, error) -> () in

    }
}

private func startPedometer()
{
    if CMPedometer.isDistanceAvailable()
    {
        if self.pedometer == nil
        {
            self.pedometer = CMPedometer()
        }

        self.pedometer!.startPedometerUpdatesFromDate(NSDate()) { (data, error) in

            dispatch_async(dispatch_get_main_queue(), {

                print("DISTANCIA PARCIAL \(data!.distance!)")

                print("DIFERENCA \(data!.distance!.doubleValue - (self.totalDistance + self.subtotalDistance))")
                self.delegate!.trackerDistanceDidChanged((data!.distance!.doubleValue - (self.totalDistance + self.subtotalDistance)) / 1000.0)
                self.subtotalDistance = data!.distance!.doubleValue

                self.apelacaoRenovarGPSLigado()

            })

        }
    }
    else
    {
        self.delegate!.trackerDeviceNotSupported()
    }
}