ผมเขียนโปรแกรมที่ต้องมีการปรับปรุงสถานที่ตั้งของพื้นหลังที่มีความแม่นยำสูงและความถี่ต่ำ โซลูชันนี้ดูเหมือนจะเป็นงาน NSTimer พื้นหลังที่เริ่มการอัปเดตของผู้จัดการสถานที่ซึ่งจะปิดลงทันที คำถามนี้ถูกถามมาก่อน:
ฉันจะอัปเดตตำแหน่งพื้นหลังทุกๆ n นาทีในแอปพลิเคชัน iOS ของฉันได้อย่างไร
รับตำแหน่งของผู้ใช้ทุก ๆ n นาทีหลังจากแอปไปที่พื้นหลัง
iOS ไม่ใช่ปัญหาตัวจับเวลาการติดตามตำแหน่งพื้นหลังทั่วไป
ตัวจับเวลาพื้นหลังที่ใช้งานได้ยาวนานของ 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 และดูเหมือนจะมีหลักฐานบางอย่างที่แสดงว่างานเบื้องหลังทำงานแตกต่างกัน: