मैं आईओएस पर एक पैडोमीटर लागू कर रहा हूं। एक महत्वपूर्ण आवश्यकता यह है कि इसे ऐप को पृष्ठभूमि मोड में डालने के बावजूद भी काम करना चाहिए (उदा।, डिवाइस लॉक हो गया है या कोई उपयोगकर्ता होम बटन दबाता है)। आप ऐप स्टोर जैसे नाइके +, रूंटैस्टिक पेडोमीटर और इस तरह के कार्यान्वयन को देख सकते हैं।पृष्ठभूमि मोड में लागू कोर मोशन के एक्सेलेरोमीटर का अजीब व्यवहार
कुछ SO पोस्टों ने पुष्टि की है कि यह कोर मोशन या विशेष रूप से CMMotionManager
के साथ Required background modes
की अतिरिक्त संपत्ति के साथ location
पर सेट किया गया है।
मैं नीचे दिए गए कोड के साथ एक त्वरित परीक्षण भाग गया और एक अजीब समस्या दिखाई दी:
// 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...
}
मैं एक iPhone 4S और iOS 6.1 के साथ इस कोड की कोशिश की। जब ऐप लॉन्च किया जाता है तो मैं होम बटन दबाता हूं और इसे 5 सेकंड के लिए (चलने के अनुकरण के लिए) हिलाता हूं और ऐप को फिर से खोलता हूं। ये क्रियाएं कुछ बार दोहराई जाती हैं। मुझे प्राप्त आउटपुट है:
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
...
मैंने रीडिंग की शुद्धता की जांच नहीं की, लेकिन त्वरित अवलोकन पहले से ही कुछ समस्या का खुलासा करता है। पृष्ठभूमि मोड में पहली बार यह ऐप भागने पर कोई रीडिंग (या कभी-कभी केवल एक पढ़ने) नहीं होती है।
मैं यहाँ क्या गलत कर रहा हूं? और क्या यह पैडोमीटर को लागू करने के लिए एक सही दृष्टिकोण है?
आप स्थापित करना चाहिए [accelerometerUpdateInterval] (http://developer.apple.com/library/ios/documentation/CoreMotion/Reference/CMMotionManager_Class/Reference/Reference.html#//apple_ref/occ/instp/CMMotionManager/accelerometerUpdateInterval) 'deviceMotionUpdateInterval' के बजाय' 1/50' तक – Kay
अच्छी पकड़! दुर्भाग्य से, यह परिणाम नहीं बदलता है। –
हाय, क्या आपको अपनी समस्या का समाधान मिला? – Axarydax