Au travail, nous avons créé une application qui permettra de suivre les itinéraires d'un utilisateur à destination et en provenance du travail et nous avons une fonction d'enregistrement automatique intégrée, mais ce n'est pas se comporter comme nous le voudrions. Il semble que ce système automatique est désactivé par le système d'exploitation après un jour ou deux d'inactivité (les téléphones ne bougent même pas durant cette période, ils sont utilisés uniquement pour les tests). Sur iOS, nous utilisons CLRegions pour créer quelques régions autour de l'emplacement actuel de l'utilisateur, il y a 5 régions créées à l'emplacement exact de l'utilisateur avec des rayons différents et 12 créées dans un cercle autour de l'utilisateur à une distance de 10 mètres (ceux-ci ont un rayon de 80 mètres). L'objet CLLocationManager est également chargé de commencer à surveiller les modifications et les visites importantes (même si celles-ci n'ont pas encore été déclenchées une seule fois).Démarrer automatiquement une application via les événements GPS sur iOS et Android avec Xamarin.Forms
Sur Android, nous utilisons Geofences via l'API LocationServices et ici, nous avons seulement les 5 rayons incrémentaux autour de l'emplacement actuel de l'utilisateur. Dans le cas où l'utilisateur ferme l'application sur Android ou redémarre son téléphone, il lancera un service d'arrière-plan qui va réinitialiser les geofences et commencer à les surveiller.
Les deux systèmes fonctionnent très bien quand je les teste en marchant un peu dehors mais il me semble qu'après un jour ou deux d'inactivité (le week-end) ils cessent de travailler. Cela fait longtemps que je débogue ça et même si ça s'est amélioré, ce n'est pas encore parfait.
Est-il même possible d'avoir un système fiable de démarrage automatique de l'application en arrière-plan lorsqu'un geofence/région est déclenchée, quelle que soit la durée pendant laquelle l'application a été désactivée? Je sais que les deux systèmes d'exploitation traitent les tâches d'arrière-plan très différemment, mais je ne suis pas certain des limites à long terme de l'utilisation du GPS de cette manière.
L'application que nous faisons est écrit dans Xamarin formes, mais ces systèmes sont écrits dans leur projet d'origine (encore en C#, mais l'accès complet à l'ensemble de la plate-forme native)
Merci pour l'info, je n'étais pas entièrement conscient que même un service en arrière-plan serait arrêté par le système après un certain temps sur Android. Pensez-vous qu'il existe un moyen de détecter quand l'intention est arrêtée et d'agir en conséquence? Oh et vous pouvez facilement donner un échantillon Java, pour la plupart c'est une syntaxe différente au lieu d'une autre langue avec Xamarin (bien que les options manifestes soient définies dans le code C# et que le compilateur gère le manifeste XML) – zezioen
pour le service arrêté, vous aurez besoin d'un processus pour vérifier cela, qui à son tour pourrait également être tué, ce qui nous ramène à la case départ. J'ai mis à jour ma réponse avec les exemples de code pour un service de premier plan et un gestionnaire d'alarmes redémarrant le service périodiquement. J'espère que cela te convient! –