मैं एक एप्लिकेशन लिख रहा हूं जिसके लिए उच्च सटीकता और कम आवृत्ति के साथ पृष्ठभूमि स्थान अपडेट की आवश्यकता है । समाधान एक पृष्ठभूमि NSTimer कार्य लगता है जो स्थान प्रबंधक के अपडेट को शुरू करता है, जो फिर तुरंत बंद हो जाता है। यह प्रश्न पहले पूछा गया है:
मुझे अपने iOS एप्लिकेशन में हर n मिनट में बैकग्राउंड लोकेशन अपडेट कैसे मिलेगा?
ऐप के बैकग्राउंड में जाने के बाद हर n मिनट में यूजर की लोकेशन मिलना
आईओएस नहीं विशिष्ट पृष्ठभूमि स्थान ट्रैकिंग टाइमर समस्या
"स्थान" पृष्ठभूमि मोड के साथ iOS लंबे समय तक चलने वाला बैकग्राउंड टाइमर
लोकेशन ट्रैकिंग के आधार पर iOS फुलटाइम बैकग्राउंड-सर्विस
लेकिन मुझे अभी तक काम करने का एक न्यूनतम उदाहरण नहीं मिला है । उपर्युक्त स्वीकृत उत्तरों के प्रत्येक क्रमांकन की कोशिश करने के बाद, मैंने एक प्रारंभिक बिंदु को एक साथ रखा। पृष्ठभूमि दर्ज करना:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"ending background task");
[[UIApplication sharedApplication] endBackgroundTask:self.bgTask];
self.bgTask = UIBackgroundTaskInvalid;
}];
self.timer = [NSTimer scheduledTimerWithTimeInterval:60
target:self.locationManager
selector:@selector(startUpdatingLocation)
userInfo:nil
repeats:YES];
}
और प्रतिनिधि विधि:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
वर्तमान व्यवहार यह है कि backgroundTimeRemaining
180 सेकंड से शून्य तक (स्थान लॉग करते समय), और फिर समाप्ति हैंडलर निष्पादित होता है और आगे कोई स्थान अपडेट उत्पन्न नहीं होता है। मैं अनिश्चित काल में पृष्ठभूमि में आवधिक स्थान अपडेट प्राप्त करने के लिए उपरोक्त कोड को कैसे संशोधित करूं ?
अद्यतन : मैं iOS 7 को लक्षित कर रहा हूं और कुछ सबूत प्रतीत होते हैं कि पृष्ठभूमि के कार्य अलग-अलग व्यवहार करते हैं: