Nó có thể được thực hiện nhưng nó không đáng tin cậy vì bạn yêu cầu hệ điều hành để có thời gian gửi một cái gì đó và nó có thể chấp nhận hoặc từ chối yêu cầu của bạn. Đây là những gì tôi đã (bị đánh cắp từ một nơi nào trên SO):
[...] //we get the new location from CLLocationManager somewhere here
BOOL isInBackground = NO;
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground)
{
isInBackground = YES;
}
if (isInBackground)
{
[self sendBackgroundLocationToServer:newLocation];
}
- (void) sendBackgroundLocationToServer: (CLLocation *) lc
{
UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid;
bgTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:2];
[dictionary setObject:[NSNumber numberWithDouble:lc.coordinate.latitude] forKey:@"floLatitude"];
[dictionary setObject:[NSNumber numberWithDouble:lc.coordinate.longitude] forKey:@"floLongitude"];
// send to server with a synchronous request
// AFTER ALL THE UPDATES, close the task
if (bgTask != UIBackgroundTaskInvalid)
{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}
}
Trước hết, không bao giờ cố gắng và thu thập các vị trí trên một thời điểm cố định . Điều này sẽ tiêu hao pin. Chỉ cần bắt đầu danh sách các thay đổi vị trí chính và nếu những thay đổi này xảy ra thì hãy gửi vị trí mới đến máy chủ. Nếu bạn cần một vị trí chính xác hơn, hãy bắt đầu GPS khi thay đổi vị trí chính xảy ra và dừng GPS khi bạn có vị trí chính xác đủ cho các yêu cầu của mình. Sau đó gửi dữ liệu đến máy chủ. – rckoenes
Đây là cách tôi đã thực hiện, tôi bắt đầu cập nhật vị trí, nhận vị trí, dừng cập nhật vị trí, gửi yêu cầu tới máy chủ, bắt đầu lại cập nhật vị trí sau 5 phút, nhận vị trí, dừng, v.v. để gửi yêu cầu nếu ứng dụng ở chế độ nền? Cảm ơn bạn. –