iphone - Alternative à startMonitoringSignificantLocationChanges?



background (2)

Je suis un débutant dans le développement d'applications iPhone, mais j'essaie de faire une application qui met à jour votre emplacement de temps en temps quand il n'est pas au premier plan, de sorte que je peux ensuite cartographier où une personne a été quand il / elle lance une application J'ai pensé que je pourrais utiliser startMonitoringSignificantLocationChange, parce que cela fonctionne quand l'application est en arrière-plan, mais il s'avère que c'est très inexact. Je voudrais vraiment être en mesure de définir un intervalle de temps, par exemple, toutes les 10 minutes, l'emplacement sera mis à jour, mais je n'ai aucune idée de comment s'y prendre. Des idées?

https://src-bin.com


Answer #1

Lisez la documentation sur l' emplacement d'arrière - plan sur le site Apple ici

Une option que vous avez est de déclarer votre application comme nécessitant des mises à jour de localisation continue.

Une application peut se déclarer comme nécessitant des mises à jour continues de l'emplacement d'arrière-plan. Une application qui nécessite des mises à jour d'emplacement régulières, au premier plan et en arrière-plan, doit ajouter la clé UIBackgroundModes à son fichier Info.plist et définir la valeur de cette clé sur un tableau contenant la chaîne d'emplacement. Cette option est destinée aux applications qui fournissent des services spécifiques, tels que les services de navigation, qui impliquent de tenir l'utilisateur informé de son emplacement à tout moment. La présence de la clé dans le fichier Info.plist de l'application indique au système qu'il doit autoriser l'exécution de l'application en arrière-plan, selon les besoins.

Cela aura le résultat souhaité en ce que votre application sera en mesure de suivre où l'utilisateur marche, mais vous devez être conscient que c'est l'option la plus gourmande en énergie et il est généralement considéré comme l'option la moins souhaitable. Cependant, si vous essayez de suivre la marche de quelqu'un, c'est le genre de chose que vous devez faire.

TOUTEFOIS . Vous dites que vous voulez seulement obtenir des mises à jour toutes les 10 minutes environ. Dans ce cas, il est préférable de ne PAS utiliser cette stratégie et d'utiliser à la place des mises à jour importantes. Ceux-ci vont redémarrer votre application si elle est fermée mais comme vous le dites, ils ne sont pas très précis. L'astuce pour les améliorer est de lancer des mises à jour de localisation normales dès que l'application reçoit la mise à jour importante et vous devriez avoir assez de temps pour améliorer votre position (en vous envoyant plus de mises à jour) avant que l'application soit à nouveau suspendue.

Ce ne sera pas parfait, mais il vaudra mieux que d'utiliser des changements significatifs (c'est-à-dire la tour cellulaire).


Answer #2

Vous pouvez simplement utiliser startUpdatingLocation mais assurez-vous simplement que les CLLocationManager votre CLLocationManager sont définies:

  1. Utilisez distanceFilter bon escient: au lieu de vérifier la mise à jour de l'emplacement toutes les X minutes, indiquez simplement au gestionnaire d'emplacement de vous mettre à jour tous les 200/300 mètres (dépend si votre utilisateur est à pied ou en voiture).

  2. desiredAccuracy devrait être aussi bien réglé à environ 100 mètres (regardez les constantes déclarées dans les fichiers d'en-tête) afin que votre application ne videra pas la batterie ..

Votre application ne sera pas relancée si elle est supprimée, mais tant qu'elle restera en arrière-plan, elle (ce qui signifie, le délégué du gestionnaire de position) continuera à recevoir locationManager:didUpdateToLocation:fromLocation:

J'espère que cela pourra aider.





location