2 votes

HERE Android SDK NavigateManager simule sans carte ne donne pas de manœuvres

J'utilise le SDK HERE Android intégré dans une application QT, et j'essaie de simuler des directions virage par virage, mais sans affichage de carte. Il n'y a pas de carte ou de MapFragment dans mon application, j'utilise la fonction MapEngine y NavigationManager directement. Et j'initialise le moteur de carte sur le fil d'exécution principal de l'interface utilisateur, comme cela est recommandé (je ne suis pas sûr que cela puisse être un problème ici).

Je suis capable d'initialiser le moteur de carte, de créer la route et de l'envoyer avec succès. Cependant, lorsque j'utilise NavigationManager pour simuler l'itinéraire, je peux voir le mouvement de la navigation (les mises à jour des coordonnées en position progressent). Cependant, j'ai des ManeuverEventListeners et des NewInstructionEventListeners, et ils ne sont jamais appelés.

Et dans ma position d'auditeur, si j'appelle getNextManeuverDistance() o getETA() Je reçois des réponses d'erreur. Toutes les autres fonctions ont réussi, et la navigation simulée se termine finalement (au moment prévu) mais sans jamais délivrer d'instructions.

J'ai le même code qui fonctionne bien dans une application exemple, mais en l'exécutant dans le cadre QT, je n'obtiens jamais de distances ou de manœuvres valides. Dans la référence de l'API, il est dit getNextManeuver() retournera null (et get distance retournera MAX_INT) si la prochaine manoeuvre n'est pas encore disponible. Quelle peut être la cause de ce problème ?

Est-il possible de l'exécuter dans une application sans Map ni MapFragment ? Avez-vous une idée de la raison pour laquelle NavigateManager simulate agirait de cette façon ?

2voto

Jason Points 41

Oui, j'ai fini par comprendre que les données cartographiques doivent être préchargées manuellement. Il semble que le calcul de l'itinéraire ne soit pas suffisant, et que la récupération des données soit normalement effectuée par la vue cartographique, et que le gestionnaire de navigation attende simplement les données cartographiques.

Dans mon cas, dès que je dispose d'un itinéraire calculé, je lance l'application mMapDataPrefetcher.fetchMapData(route,radius) puis lancez immédiatement le mNavigationManager.simulate(route,speed) . La navigation est un peu bancale jusqu'à ce que les données de la carte soient chargées, mais elle commence à répondre immédiatement après le chargement de la carte. Le chargement peut être lent dans certains de mes tests, je ne sais pas pourquoi. Mais dans les utilisations fréquentes, les données de la carte sont souvent déjà présentes, donc cela fonctionne mieux dans ce cas.

Je ne suis pas sûr de ce qu'est un bon rayon ; j'ai essayé 500m et l'appel a échoué ; 2000m fonctionne pour moi en ce moment.

Voir les pages ici :

Ces fonctionnalités sont décrites comme étant en version bêta, donc je ne suis pas sûr qu'il y ait un moyen de faire cela de manière soutenue, en production.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X