ios5 - plus - desactivar sensor de proximidad iphone
¿Cómo Nike+GPS en iPhone recibe actualizaciones de acelerómetro en el fondo? (2)
La nueva aplicación Nike + GPS para iOS 5 es capaz de procesar eventos de acelerómetro en segundo plano (lo que permite el seguimiento en cinta de correr interior). ¿Cómo es esto posible? Cuando pongo mi aplicación en segundo plano, deja de recibir eventos. Uso la API UIAccelerometer estándar.
Cuando el bloque con la actualización del podómetro, llamo al método para apagar y encender el GPS. Para mí, solucionó el problema cuando el usuario pulsaba la tecla de inicio y se quedaba una hora escuchando música en Spotify.
No olvides habilitar Configuración del proyecto -> Capacidades -> Modos de fondo -> Actualizaciones de ubicación
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()
}
}
Por el bien de proporcionar una respuesta a esta pregunta, a pesar de que ya está respondida por uno mismo ...
"Si usa la API Core Motion más nueva, puede recibir actualizaciones en segundo plano".
Aquí hay un ejemplo:
- (void)startAccelerationCollection {
[self.motionManager startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init]
withHandler:^(CMAccelerometerData *data, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
[self.accelerometerReadings addObject:data];
});
}];
}