Se puede hacer pero no es confiable porque le pide al sistema operativo el tiempo para enviar algo y puede aceptar o denegar su solicitud. Esto es lo que he (robado de algún lugar de 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];
}
}
En primer lugar, no tratar de cobrar la ubicación en un horario fijo . Esto drenará la batería. Simplemente comience a listar los principales cambios de ubicación y, si esto ocurre, envíe la nueva ubicación al servidor. Si necesita una ubicación más precisa, inicie el GPS cuando ocurra el cambio de ubicación principal y pare el GPS cuando tenga la ubicación lo suficientemente precisa para sus necesidades. A continuación, envíe los datos al servidor. – rckoenes
Así lo hice, inicio las ubicaciones de actualización, obtengo la ubicación, dejo de actualizar la ubicación, envío la solicitud al servidor, inicio de nuevo la actualización de la ubicación después de 5 minutos, obtengo la ubicación, me detengo, etc. La pregunta es ¿puedo hacerlo? para enviar la solicitud si la aplicación está en modo de fondo? Gracias. –