2013-05-20 2 views
5

Мне нужно обновление ускорителя, когда приложение работает в фоновом режиме/устройство находится в спящем режиме. Некоторые приложения делают это, я не мог заставить его работать. Для этого у меня есть свойство CoreMotion в моем AppDelegate и applicationDidEnterBackground я называюiOS Обновления ускорителя Coremotion в фоновом режиме/sleepmode

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

В приложении PLIST я поставил режим Необходимые предпосылки для App регистров для обновления местоположения. Когда я помещаю устройство в спящий режим или в фоновом режиме, в журналах не появляются обновления. Когда приложение активно, coremotion запускает loggin. Кто-нибудь получил намек на меня? Спасибо.

ответ

0

Это потому, что вы отправляете его в основную очередь. Для включения фоновой активности, вы должны направить его в глобальную очередь:

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

UPDATE Добавить Swift версия:

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

Ссылка: using the same dispatch queue in a method for background processing

+0

Спасибо, но с отправкой в глобальная очередь тоже не работает. – simon

+2

Кроме того, в вашем plist приложения вы использовали 'Обязательные фоновые режимы'-> и в' item 0' выберите 'App registers for location updates'? – Raptor

+0

Да, да. Обновления местоположения работают в фоновом режиме/режиме ожидания. – simon

Смежные вопросы