ver ubicacion segun recuperar pantalla notificaciones historial funciona como centro borradas bloqueada actual ios objective-c core-location

ubicacion - Obtenga actualizaciones de ubicación para la aplicación iOS incluso cuando está suspendido



whatsapp notificaciones iphone (2)

Después de meses de pruebas y errores al experimentar el Core Location Framework, he encontrado la solución para obtener la actualización de la ubicación incluso cuando la aplicación se cierra / suspende. Funciona bien para iOS 7 y 8.

Aquí está la solución: -

Si su aplicación es una aplicación móvil basada en la ubicación que necesita monitorear la ubicación del dispositivo cuando tiene cambios significativos, el iOS le devolverá algunas coordenadas de ubicación cuando el dispositivo se haya movido a más de 500 metros de la última ubicación conocida. Sí, incluso cuando la aplicación es eliminada / suspendida por el usuario o por el propio iOS, aún puede obtener las actualizaciones de ubicación.

Entonces, para que un locationManager obtenga una actualización de ubicación incluso cuando la aplicación se startMonitoringSignificantLocationChanges / suspende, debe usar el método startMonitoringSignificantLocationChanges , no puede usar startUpdatingLocation .

Cuando iOS desea devolver la actualización de ubicación a la aplicación, le ayudará a UIApplicationLaunchOptionsLocationKey la aplicación y devolver una clave UIApplicationLaunchOptionsLocationKey al método delegado de la aplicación didFinishLaunchingWithOptions .

La clave UIApplicationLaunchOptionsLocationKey es muy importante y debe saber cómo manejarla. Debe crear una nueva instancia de locationManager cuando reciba la clave y obtendrá la actualización de ubicación en el método de delegado de locationManager didUpdateLocations .

Aquí está el código de ejemplo:-

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.shareModel = [LocationShareModel sharedModel]; if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) { self.shareModel.anotherLocationManager = [[CLLocationManager alloc]init]; self.shareModel.anotherLocationManager.delegate = self; self.shareModel.anotherLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; self.shareModel.anotherLocationManager.activityType = CLActivityTypeOtherNavigation; if(IS_OS_8_OR_LATER) { [self.shareModel.anotherLocationManager requestAlwaysAuthorization]; } [self.shareModel.anotherLocationManager startMonitoringSignificantLocationChanges]; } return YES; }

Además del método didFinishLaunchingWithOptions , he creado la instancia de locationManager cuando la aplicación está activa. Aquí hay algunos ejemplos de código:

- (void)applicationDidEnterBackground:(UIApplication *)application { [self.shareModel.anotherLocationManager stopMonitoringSignificantLocationChanges]; if(IS_OS_8_OR_LATER) { [self.shareModel.anotherLocationManager requestAlwaysAuthorization]; } [self.shareModel.anotherLocationManager startMonitoringSignificantLocationChanges]; } - (void)applicationDidBecomeActive:(UIApplication *)application { if(self.shareModel.anotherLocationManager) [self.shareModel.anotherLocationManager stopMonitoringSignificantLocationChanges]; self.shareModel.anotherLocationManager = [[CLLocationManager alloc]init]; self.shareModel.anotherLocationManager.delegate = self; self.shareModel.anotherLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; self.shareModel.anotherLocationManager.activityType = CLActivityTypeOtherNavigation; if(IS_OS_8_OR_LATER) { [self.shareModel.anotherLocationManager requestAlwaysAuthorization]; } [self.shareModel.anotherLocationManager startMonitoringSignificantLocationChanges]; }

He escrito un artículo que explica los detalles sobre cómo obtener la actualización de ubicación para iOS 7 y 8 incluso cuando la aplicación se cierra / suspende. También he subido el código fuente completo en GitHub con los pasos sobre cómo probar esta solución.

Visite las siguientes URL para obtener más información: -

  1. Obtención de actualizaciones de ubicación para iOS 7 y 8 cuando la aplicación se cierra / termina / suspende
  2. Código fuente en GitHub: obtenga las actualizaciones de ubicación incluso cuando las aplicaciones móviles iOS están suspendidas / terminadas / eliminadas

A principios de 2014, Apple actualizó iOS 7.0 a 7.1 para permitir actualizaciones de ubicación incluso cuando la aplicación no está activa en primer plano y no en segundo plano. ¿Como hacemos eso?

He leído algunos artículos como iOS 7.1 de Apple que solucionará un error de geolocalización . Pero Apple no proporcionó mucha comunicación relacionada con eso ni ningún código de muestra sobre cómo obtener la actualización de ubicación, incluso cuando la aplicación se cierra / finaliza / suspende.

He leído las Notas de la versión para iOS 7.1 . No pude encontrar nada relacionado con eso también.

Entonces, ¿cómo obtenemos la actualización de ubicación para iOS 7 y 8 incluso cuando la aplicación está suspendida?


locationManager = [[CLLocationManager alloc] init]; #define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) if(IS_OS_8_OR_LATER) { [locationManager requestWhenInUseAuthorization]; } locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; //whenever we move locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; [locationManager startUpdatingLocation];

la actualización de la ubicación del usuario de ese código solo para la aplicación en ejecución, pero no la ejecución en segundo plano

[locationManager requestWhenInUseAuthorization];