2017-07-20 1 views
1

pour récupérer l'emplacement de l'utilisateur lorsque l'application est en arrière-plan i d'abord faire startMonitoringSignificantLocationChanges puis quand DidUpdateLocations est tiré que je fais avec un second CLLocationManagerstartUpdatingLocation pour récupérer la géoPosition exacte (avec une précision sur 100m)Comment savoir quand arrêter les services de localisation?

Le problème est que le doc dit:

appel de cette méthode provoque le gestionnaire d'emplacement pour obtenir un emplacement fixe initial (ce qui peut prendre plusieurs secondes). Après cela, le récepteur génère des événements de mise à jour principalement lorsque la valeur de la propriété distanceFilter est dépassée.

Alors que je comprends la première DidUpdateLocations sera appelée avec une solution pas vraiment précise, et avec le temps d'autres DidUpdateLocations sera appelé avec emplacement plus précis.

Maintenant, le problème est quand (et comment?) Ai-je besoin d'arrêter startUpdatingLocation? Je suis en arrière-plan donc je ne peux pas utiliser de minuterie ou penser comme ça

Répondre

0

Puisque vous avez besoin d'une précision de 100m, vous pouvez simplement vérifier la propriété de précision horizontale de l'emplacement. Si la condition est remplie, vous pouvez arrêter le gestionnaire de localisation de base sinon vous gardez le suivi. N'oubliez pas que le rappel des modifications de surveillance importantes maintient votre application en vie pendant un minimum de temps.

Au moment de réveil, l'application est mis en arrière-plan et vous sont donnés une petite quantité de temps (environ 10 secondes) pour redémarrer manuellement les services de localisation et de traiter les données de localisation. (Vous devez manuellement redémarrer les services de localisation en arrière-plan avant que toutes les mises à jour d'emplacement en attente puissent être livrées, comme décrit dans Connaître le moment où Démarrer les services de localisation.) Comme votre application est en arrière-plan, elle doit effectuer un minimum de travail et éviter tout tâches (telles que l'interrogation du réseau ) qui peut empêcher son retour avant l'expiration du délai alloué. Si ce n'est pas le cas, votre application sera clôturée. Si une application iOS nécessite plus de temps pour traiter les données de localisation, elle peut demander davantage de temps d'exécution en arrière-plan en utilisant la méthode beginBackgroundTaskWithName: expirationHandler: de la classe UIApplication .