iOS: ¿el GPS de background se detiene por sí mismo?

Tengo una aplicación que llama a [locationManager startUpdatingLocation] y nunca llama [locationManager stopUpdatingLocation] ya que el GPS debe ejecutarse en segundo plano.

Configuré mi file info.plist para permitir que la aplicación se registre para las actualizaciones de location de background. Pero me he dado count de vez en cuando (cuando la aplicación está en segundo plano), que la pequeña flecha en la parte superior derecha de la pantalla que indica que el GPS está encendido, se apaga solo.

¿Hay alguna razón para que esto suceda?

Llamo [locationManager startUpdatingLocation] solo una vez, en el método applicationDidBecomeActive . ¿Debo también llamarlo en el método applicationDidEnterBackground ?

De la manzana docs:

Permitir que el administrador de location detenga las actualizaciones puede mejorar la duración de la batería en el dispositivo de destino sin sacrificar los datos de location. Cuando esta propiedad se establece en SÍ, el administrador de la location detiene las actualizaciones (y apaga el hardware apropiado) en momentos en que es improbable que cambien los datos de la location. Por ejemplo, si el usuario se detiene para comer mientras usa una aplicación de navigation, el administrador de la location podría pausar las actualizaciones por un período de time. Puede ayudar a determinar cuándo detener las actualizaciones de location asignando un valor a la propiedad activityType.

Ha habido un cambio en iOS 6 con respecto a la location principal. Necesita desactivar AutoPause. Cambie pausesLocationUpdatesAutomatically to NO. Las actualizaciones de location se enviarán incluso cuando la aplicación se encuentre en segundo plano, como solía funcionar en <iOS 6.

http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager.html

ACTUALIZADO: puede usar las actualizaciones estándar en segundo plano. De acuerdo con Apple:

Si su aplicación necesita actualizaciones de location entregadas si la aplicación está en primer plano o en segundo plano, hay varias opciones para hacerlo. La opción preferida es usar el service de cambio de location significativo para activar su aplicación en los momentos apropiados para manejar nuevos events. Sin embargo, si su aplicación necesita usar el service de location estándar, puede declarar que su aplicación necesita services de location en segundo plano.

Una aplicación debe solicitar services de localización de background solo si la ausencia de esos services perjudica su capacidad de operar. Además, cualquier aplicación que solicite services de location en segundo plano debe usar esos services para proporcionar un beneficio tangible al usuario. Por ejemplo, una aplicación de navigation paso a paso sería un posible candidato para los services de localización en segundo plano debido a su necesidad de rastrear la position del usuario e informar cuándo es el momento de hacer el próximo turno.

Eche un vistazo a este enlace: http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4


Las aplicaciones que se ejecutan en segundo plano generalmente están destinadas a usar [locationManager startMonitoringSignificantLocationChanges]; en lugar del estándar [locationManager startUpdatingLocation]; .

Apple tiene algunas pautas rígidas sobre este tema. Si aún no lo has hecho, deberías leerlo aquí:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW1

Es probable que las actualizaciones de su location se detengan porque está utilizando la actualización de location estándar en segundo plano en lugar de los cambios de location significativos.