适用于iOS 5的新Nike+全球定位系统应用程序能够在后台处理加速度计事件(从而支持室内跑步机跟踪)。这怎麽可能?当我把我的应用程序放到后台时,它停止接收事件。我使用标准的UIAccelerometer应用程序接口。
发布于 2012-03-07 17:41:16
为了给这个问题提供一个答案,尽管它已经是自己回答的了…
如果使用较新的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];
});
}];
}发布于 2017-07-29 04:49:08
当更新计步器时,我调用关闭和打开GPS的方法。对我来说,它解决了用户按home键并在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()
}
}https://stackoverflow.com/questions/8716466
复制相似问题