5

iOS'ta bir pedometre uyguluyorum. Önemli bir gereksinim, uygulamanın arka plan moduna geçirilse bile çalışması gerekir (ör., Bir cihaz kilitli veya bir kullanıcı ana düğmeye basar). App Store'da Nike +, Runtastic Pedometer ve benzeri uygulamaları görebilirsiniz.Arka plan modunda uygulanan Core Motion'ın ivmeölçerinin garip davranışı

Birkaç SO kaydı, bunun Core Motion veya özellikle Required background modeslocation olarak ayarlanmış ek bir özelliği olan CMMotionManager ile mümkün olduğunu doğruladı.

aşağıda koduyla hızlı testi yaptı ve garip sorun buldu: Ben bir iPhone 4S ve iOS 6.1 ile bu kodu çalıştı

// AppDelegate.m 
- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    if(self.motionManager==nil) { 
     self.motionManager=[[CMMotionManager alloc] init]; 
    } 
    self.motionManager.accelerometerUpdateInterval=1/50; 

    if(self.accelerometerReadings==nil) 
     self.accelerometerReadings=[[NSMutableArray alloc] init]; 

    [self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.accelerometerReadings addObject:accelerometerData]; 
     }); 
    } 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    NSLog(@"The number of readings %d",self.accelerometerReadings.count); 

    // do something with accelerometer data... 
} 

. Uygulama başlatıldığında, ev düğmesine basın ve 5 saniye boyunca (yürüyüş simüle etmek için) sallayın ve uygulamayı tekrar açın. Bu eylemler birkaç kez tekrarlanır.

2013-02-05 16:41:42.028 [1147:907] readings 0 
2013-02-05 16:41:51.572 [1147:907] readings 444 
2013-02-05 16:42:00.386 [1147:907] readings 1032 
2013-02-05 16:42:08.026 [1147:907] readings 1555 
... 

Ben okumaların doğruluğunu kontrol etmedi, ama çabuk gözlem zaten bazı sorunu ortaya çıkarır: bende çıkıştır. Bu uygulamanın ilk kez arka plan modunda çalıştırıldığını (veya sadece bir okuma) yoktur.

Burada yanlış olan ne yapıyorum? Ve bu bir pedometrenin uygulanması için doğru bir yaklaşım mı?

+0

Bunu [accelerometerUpdateInterval] belirlesin (http://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMMotionManager_Class/Reference/Reference.html#//apple_ref/occ/instp/CMMotionManager/accelerometerUpdateInterval) 'deviceMotionUpdateInterval' yerine' 1/50' yerine – Kay

+0

Güzel yakalama! Ne yazık ki, bu sonuç değiştirmez. –

+0

Merhaba, probleminize bir çözüm buldunuz mu? – Axarydax

cevap