2013-05-20 10 views
5

Ho bisogno di aggiornamenti dell'acceleratore quando l'app è in esecuzione in background/il dispositivo è in modalità di sospensione. Alcune app lo fanno, non riuscivo a farlo funzionare. Per questo ho una proprietà CoreMotion nel mio AppDelegate e applicationDidEnterBackground io chiamoAggiornamenti dell'acceleratore Coremotion iOS in background/modalità sleep

-(void) startAccelerationUpdates 
{ 

    self.motionManager.deviceMotionUpdateInterval = 0.01; 
    [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] 
             withHandler:^(CMDeviceMotion *motion, NSError *error){ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
     NSLog(@"acceleration x %f", motion.userAcceleration.x); 
     NSLog(@"acceleration y %f", motion.userAcceleration.y); 
     NSLog(@"acceleration z %f", motion.userAcceleration.z); 
     } 
     ); 
     } 
    ]; 
} 

Nel plist app ho messo le modalità di sfondo tenuti a App si registra per gli aggiornamenti di posizione. Quando metto il dispositivo in modalità di sospensione o in background non vengono visualizzati aggiornamenti nei registri. Quando l'app diventa attiva, il coremotion avvia l'accesso. Qualcuno ha un suggerimento per me? Grazie.

risposta

0

È perché lo si invia alla coda principale. Per consentire l'attività di fondo, si dovrebbe inviare a coda globale:

dispatch_queue_t lowQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); 
dispatch_async(lowQueue, ^{ ... 

UPDATE Aggiungi versione Swift:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)) { 
    // do some task 
} 

Riferimento: using the same dispatch queue in a method for background processing

+0

Grazie, ma con la spedizione coda globale non funziona neanche. – simon

+2

Inoltre, nel plist dell'app, hai usato 'Richiesto modalità di sfondo '-> e a' item 0' scegli 'Registri app per gli aggiornamenti di posizione'? – Raptor

+0

Sì, l'ho fatto. Gli aggiornamenti delle posizioni funzionano in modalità background/sleep. – simon