2013-05-20 9 views
5

Potrzebuję aktualizacji akceleratora, gdy aplikacja działa w tle/urządzenie znajduje się w trybie uśpienia. Niektóre aplikacje robią to, nie mogłem sprawić, żeby działało. Do tego mam właściwość CoreMotion w moim appdelegate aw applicationDidEnterBackground WzywamAktualizacje akceleratora Coremotion w tle/tryb uśpienia

-(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); 
     } 
     ); 
     } 
    ]; 
} 

w App plist kładę Wymagane tryby tło do App rejestruje aktualizacje lokalizacji. Po przełączeniu urządzenia w tryb uśpienia lub w tle aktualizacje nie pojawiają się w dziennikach. Gdy aplikacja staje się aktywna, coremotion uruchamia się. Czy ktoś ma dla mnie wskazówkę? Dziękuję Ci.

Odpowiedz

0

Jest tak dlatego, że wysyłamy go do głównej kolejki. Aby umożliwić działanie w tle, należy wysyła go do globalnej kolejki:

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

UPDATE Dodaj Swift wersję:

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

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

+0

Dziękuję, ale z wysyłką do globalna kolejka też nie działa. – simon

+2

Dodatkowo, w paczce twojej aplikacji użyłeś 'Wymaganych trybów tła'-> i w pozycji" element 0 "wybierz' Rejestr aplikacji dla aktualizacji lokalizacji'? – Raptor

+0

Tak, zrobiłem. Aktualizacje lokalizacji działają w tle/w trybie uśpienia. – simon