Tôi đang viết một ứng dụng yêu cầu cập nhật vị trí nền với độ chính xác cao và tần suất thấp . Giải pháp dường như là một tác vụ NSTimer nền bắt đầu cập nhật của trình quản lý vị trí, sau đó ngay lập tức tắt. Câu hỏi này đã được hỏi trước đây:
Làm cách nào để nhận bản cập nhật vị trí nền sau mỗi n phút trong ứng dụng iOS của tôi?
Nhận vị trí của người dùng sau mỗi n phút sau khi ứng dụng chuyển sang chế độ nền
iOS Không phải là vấn đề điển hình của bộ hẹn giờ theo dõi vị trí nền
Bộ hẹn giờ chạy nền lâu dài trên iOS với chế độ nền "vị trí"
Dịch vụ nền toàn thời gian của iOS dựa trên theo dõi vị trí
nhưng tôi vẫn chưa nhận được một ví dụ tối thiểu hoạt động. Sau khi thử mọi hoán vị của các câu trả lời được chấp nhận ở trên, tôi đặt lại một điểm bắt đầu. Nhập nền:
- (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];
}
và phương thức ủy quyền:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation {
NSLog(@"%@", newLocation);
NSLog(@"background time: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
[self.locationManager stopUpdatingLocation];
}
Hành vi hiện tại là backgroundTimeRemaining
giảm từ 180 giây xuống 0 (trong khi ghi lại vị trí), và sau đó trình xử lý hết hạn thực thi và không có cập nhật vị trí nào được tạo thêm. Làm cách nào để sửa đổi mã trên để nhận được cập nhật vị trí định kỳ trong nền vô thời hạn ?
Cập nhật : Tôi đang nhắm mục tiêu iOS 7 và dường như có một số bằng chứng cho thấy các tác vụ nền hoạt động khác nhau: