2011-04-27 11 views
7

Saludos a todos.Actualizaciones de ubicación cuando la aplicación está en segundo plano o suspendida

Estoy intentando implementar un cambio significativo de ubicación y soporte de región en mi aplicación. Mientras la aplicación está activa, obviamente no hay problemas para recibir actualizaciones de ubicación. Mi pregunta es cómo manejar las actualizaciones cuando la aplicación no está activa.

Este es mi entendimiento de lo que sucede si se detecta un significativo cambio de ubicación o zona de entrada/salida:

  • Si la aplicación está en el fondo o se suspende, el IOS llama locationManager: didUpdateToLocation: fromLocation: (o locationManager: didEnterRegion :) en mi delegado de ubicación existente.
  • Si la aplicación finaliza, iOS llama a la aplicación: didFinishLaunchingWithOptions: con la clave UIApplicationLaunchOptionsLocationKey en mi aplicación delegada. En este punto, necesito crear una nueva instancia de administrador de ubicación para obtener la nueva ubicación.

¿Es esto correcto? ¿Me estoy perdiendo algo?

Gracias por la ayuda.

Saludos, --John

Respuesta

7

Usted tiene razón en parte.

Si la aplicación está en segundo plano, y se está utilizando significativa de cambio de ubicación:

  1. La aplicación va a llamar locationManager: locationDidUpdateToLocation: fromLocation
  2. Si la aplicación se estrelló mientras se encontraba en el fondo, se llamará a la aplicación : didFinishLaunchingWithOption: con UIApplicationLaunchOptionLocationKey. Luego debe iniciar el administrador de ubicaciones de nuevo para obtener un cambio de ubicación significativo. Esto luego entrará en locationManager: locationDidUpdateToLocation: fromLocation. Este paso es importante

Si la aplicación está en segundo plano, y está utilizando el monitoreo región

  1. locationManager: locationDidUpdateToLocation: fromLocation no se llamará
  2. la aplicación llama locationManager: didEnterRegion:
+0

Derecha. Dejé de lado locationManager: didEnterRegion. Creo que estoy renunciando a la supervisión de la región, parece que no funciona. Probé todas las regiones de tamaño con varios umbrales, parece que no puede hacer que funcione. – johnnyspo

+0

@honcheng hola, si la aplicación está en segundo plano locationManager: se llamará a didEnterRegion? ¿De Verdad? He leído toneladas de mensajes y todos afirman que una vez que la aplicación está en segundo plano, incluso si se configura la monitorización de regiones, solo se llamará a locationManager: locationDidUpdate: fromLocation. Solo espero aclararlo, porque me gustaría configurar Region Monitoring en segundo plano. – Unheilig

+0

Aquí está la solución sobre cómo obtener la actualización de la ubicación cuando la aplicación se cancela/suspende para iOS 7 y 8: http://stackoverflow.com/questions/27742677/how-to-get-location-updates-for-ios -7-y-8-even-when-the-app-is-suspendido – Ricky

-3

Creo que siempre llama de aplicación: didFinishLaunchingWithOptions si su aplicación no está en primer plano.

+2

Solo lo llamará en segundo plano, si la aplicación no se inició o si se bloqueó. El dispositivo intenta reiniciar la aplicación, por lo que solo llama a este método y luego a – honcheng

3

Para obtener la actualización de ubicación cuando la aplicación está en segundo plano en comparación con cuando la aplicación se suspende son 2 escenario muy diferente. Tendrá que manejarlos de manera diferente.

Sólo puede utilizar la tecla UIApplicationLaunchOptionsLocationKey si su locationManager está utilizando el método startMonitoringSignificantLocationChanges, no se puede utilizar startUpdatingLocation.

Para obtener la actualización de localización cuando

A) La aplicación está en el fondo, por favor ver: Background Location Services not working in iOS 7

B) La aplicación se suspende/terminado, por favor ver: How to Get Location Updates for iOS 7 and 8 Even when the App is Suspended

tengo escrito 2 artículo muy largo explicando los diferentes entre los 2 escenarios. Los códigos fuente para el escenario de arriba 2 también están disponibles en el GitHub.

Cuestiones relacionadas