Flèche GPS grise affichée dans la barre d'état bien que l'application basée sur la localization ait été supprimée à l'aide de la fonction de sélection rapide de l'application

CLLocationManager une application basée sur la localization pour iOS 5. L'application utilise le CLLocationManager pour recevoir les mises à jour de position.

Lorsque l'application est démarrée, je crée le LocationManager en appelant [self.locationManager startUpdatingLocation]; et la flèche d'location grise apparaît dans la barre d'état.

Lorsque l'application entre en arrière-plan, j'appelle

 [self.locationManager stopUpdatingLocation]; [self.locationManager startMonitoringSignificantLocationChanges]; 

parce que je veux juste recevoir des changements significatifs de lieu pendant que l'application est en arrière-plan. La flèche d'location grise est toujours affichée.

J'ai aussi un button de sortie dans ma request où j'appelle

 [self.locationManager stopUpdatingLocation]; exit(0); 

Lorsque l'user appuie sur le button de sortie, l'application se termine et le button d'location gris disparaît de la barre d'état. Tout va bien jusqu'à maintenant.

Un problème apparaît lorsque les users terminent l'application à l'aide du sélecteur d'application rapide, car ensuite la flèche d'location grise s'affiche toujours dans la barre d'état, bien que l'application ne soit pas en cours d'exécution. La flèche d'location grise disparaît d'abord lorsque l'user supprime l'application de son iPhone.

Donc les questions sont:

  • Lorsque les users terminent l'application à l'aide de Fast App Switcher et que la flèche grise apparaît toujours dans la barre d'état, cela signifie-t-il que les mises à jour de localization sont toujours exécutées ou que cela signifie qu'une application a utilisé les services de localization au cours des dernières 24 heures? Je suppose que la réponse est la première, les mises à jour de localization sont toujours exécutées!

  • L'application doit être exécutée en arrière-plan, donc je ne peux pas arrêter le LocationManager lorsque l'application entre en arrière-plan. applicationWillTerminate: n'est jamais appelé lorsque l'user tue l'application à l'aide de Fast App Switcher. Y at-il un moyen de recevoir un événement, lorsque l'application est terminée en utilisant Fast App Switcher ou est terminée par le operating system ????

  • J'ai vu d'autres applications, où la flèche grise dans la barre d'état disparaît lorsque l'application est tuée en utilisant Fast App Switcher. Comment ces applications réalisent-elles cela ???

  1. Des mises à jour importantes sont disponibles si votre application n'est pas à l'avant-plan.
  2. Je vous donne juste une idée que j'ai fait quelque chose comme ça mais je ne sais pas ce qui se passe dans votre cas.
    Il suffit d'save votre application pour la tâche d'arrière-plan et faire quelque chose à des fins de test dans ce cas si vous tuez votre application via la commutation rapide d'application, puis la méthode de délégué applicationWillTerminate: est toujours appelée.

_ __ _ __ _ __ _ _ Edité _ __ _ __ _ __ _ __ _ _ _
il suffit d'append cette varibale dans votre AppDelegate.h

 UIBackgroundTaskIdentifier bgTask; 

et faites votre méthode de délégué comme ceci et maintenant tuez votre application

  - (void)applicationDidEnterBackground:(UIApplication *)application { UIApplication *app = [UIApplication sharedApplication]; if ([app respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) { bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ // Synchronize the cleanup call on the main thread in case // the task actually finishes at around the same time. dispatch_async(dispatch_get_main_queue(), ^{ if (bgTask != UIBackgroundTaskInvalid) { [app endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid; } }); }]; } } - (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"is terminated"); } 

_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _

essayez de restaurer les "avertissements de localization" dans "settings-> general-> reset-> reset warnings". Cela a fonctionné pour moi en utilisant "startupdatinglocation".