Mon application doit montrer les directions de Google Maps de A à B, mais je ne veux pas mettre Google Maps dans mon application - à la place, je veux la lancer en utilisant une intention. Est-ce possible? Si oui, comment?
399
Mon application doit montrer les directions de Google Maps de A à B, mais je ne veux pas mettre Google Maps dans mon application - à la place, je veux la lancer en utilisant une intention. Est-ce possible? Si oui, comment?
Réponses:
Vous pouvez utiliser quelque chose comme ceci:
Pour démarrer la navigation à partir de l'emplacement actuel, supprimez le
saddr
paramètre et la valeur.Vous pouvez utiliser une adresse réelle au lieu de la latitude et de la longitude. Cependant, cela donnera à l'utilisateur une boîte de dialogue pour choisir entre l'ouvrir via un navigateur ou Google Maps.
Cela lancera directement Google Maps en mode navigation:
MISE À JOUR
En mai 2017, Google a lancé la nouvelle API pour les URL universelles et multiplateformes de Google Maps:
https://developers.google.com/maps/documentation/urls/guide
Vous pouvez également utiliser Intents avec la nouvelle API.
la source
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
C'est un peu hors sujet car vous avez demandé des "directions", mais vous pouvez également utiliser le schéma Geo URI décrit dans la documentation Android:
http://developer.android.com/guide/appendix/g-app-intents.html
Le problème avec "geo: latitude, longitude" est que Google Maps se centre uniquement sur votre point, sans épingle ni étiquette.
C'est assez déroutant, surtout si vous devez pointer vers un endroit précis ou / et demander des directions.
Si vous utilisez le paramètre de requête "geo: lat, lon? Q = nom" pour étiqueter votre géopoint, il utilise la requête pour la recherche et ignore les paramètres lat / lon.
J'ai trouvé un moyen de centrer la carte avec lat / lon et d'afficher une épingle avec une étiquette personnalisée, très agréable à afficher et utile pour demander des directions ou toute autre action:
REMARQUE (par @TheNail): ne fonctionne pas dans Maps v.7 (dernière version au moment de la rédaction). Ignorera les coordonnées et recherchera un objet avec le nom donné entre les parenthèses. Voir aussi Intention pour Google Maps 7.0.0 avec emplacement
la source
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?Bien que les réponses actuelles soient excellentes, aucune d'entre elles n'a fait tout à fait ce que je cherchais, je voulais ouvrir l'application de cartes uniquement, ajouter un nom pour chaque emplacement et destination source, en utilisant le schéma d'URI géo ne fonctionnerait pas pour moi du tout et le lien Web des cartes n'avait pas d'étiquettes, j'ai donc proposé cette solution, qui est essentiellement une fusion des autres solutions et commentaires faits ici, j'espère que cela sera utile pour les autres personnes qui consultent cette question.
Pour utiliser votre position actuelle comme point de départ (malheureusement, je n'ai pas trouvé de moyen d'étiqueter la position actuelle), utilisez ce qui suit
Pour être complet, si l'utilisateur n'a pas l'application de cartes installée, alors ce sera une bonne idée d'attraper l'ActivityNotFoundException, alors nous pouvons recommencer l'activité sans la restriction de l'application de cartes, nous pouvons être sûrs que nous n'obtiendrons jamais au Toast à la fin puisqu'un navigateur Internet est une application valide pour lancer ce schéma d'url aussi.
PS Toutes les latitudes ou longitudes utilisées dans mon exemple ne sont pas représentatives de mon emplacement, toute ressemblance avec un emplacement réel est une pure coïncidence, alias je ne suis pas d'Afrique: P
ÉDITER:
Pour les directions, une intention de navigation est désormais prise en charge avec google.navigation
la source
Utilisation des dernières URL multiplateformes de Google Maps : même si l'application google maps est manquante, elle s'ouvrira dans le navigateur
Exemple https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
la source
Ouvrez Google Maps en utilisant Intent avec différents modes:
Nous pouvons ouvrir l'application Google Maps en utilisant l'intention:
Ici, "mode = b" est pour le vélo.
Nous pouvons définir le mode de conduite, de marche et de vélo en utilisant:
Vous pouvez en savoir plus sur l'intention avec google maps ici .
Remarque: S'il n'y a pas d'itinéraire pour le vélo / la voiture / la marche, il vous indiquera "Impossible de trouver le chemin"
Vous pouvez vérifier ma réponse originale ici .
la source
Eh bien, vous pouvez essayer d'ouvrir l'application Android Maps intégrée en utilisant la
Intent.setClassName
méthode.la source
Pour les points de cheminement multiples, les éléments suivants peuvent également être utilisés.
Le premier ensemble de coordonnées est votre emplacement de départ. Tous les points suivants sont des points de cheminement, l'itinéraire tracé passe.
Continuez simplement à ajouter des points de cheminement en concaténant "/ latitude, longitude" à la fin. Selon Google Documents, il y a apparemment une limite de 23 points de passage . Je ne sais pas si cela s'applique également à Android.
la source
Si vous souhaitez afficher la latitude et la longitude de la direction actuelle, vous pouvez utiliser ceci:
La requête suivante vous aidera à effectuer cela. Vous pouvez transmettre la latitude et la longitude de destination ici:
Utilisez ci-dessus comme:
Ou si vous souhaitez afficher via l'emplacement, utilisez:
Plus d'informations ici: Google Maps Intents pour Android
la source
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google
DirectionsView
avec l'emplacement source comme emplacement actuel et l'emplacement de destination donné sous forme de chaîneDans ce qui précède,
destinationCityName
une chaîne variable peut être modifiée selon les besoins.la source
essaye ça
la source
C'est ce qui a fonctionné pour moi:
la source
si vous connaissez le point A, le point B (et toutes les fonctionnalités ou pistes intermédiaires), vous pouvez utiliser un fichier KML avec votre intention.
pour plus d'informations, voir cette réponse SO
REMARQUE: cet exemple utilise un exemple de fichier qui (à partir de mar13) est toujours en ligne. s'il est hors ligne, recherchez un fichier kml en ligne et modifiez votre URL
la source
D'abord, vous devez maintenant que vous pouvez utiliser l'intention implicite, la documentation Android nous fournit des intentions communes très détaillées pour implémenter l'intention de la carte dont vous avez besoin pour créer une nouvelle intention avec deux paramètres
Pour l'action que nous pouvons utiliser
Intent.ACTION_VIEW
et pour Uri nous devons le construire, ci-dessous j'ai joint un exemple de code pour créer, construire, démarrer l'activité.la source
<scheme>://<authority><absolute path>?<query>#<fragment>
pas d'URI opaques<scheme>:<opaque part>#<fragment>
. Le code ci-dessus donne l'URI suivant:geo:/0%2C0?Eiffel%20Tower
ce qui provoque le blocage de l'application Google Maps. Même la documentation officielle utilise des URI bruts / opaques pour cette raison. Le code correct serait alors:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Une belle solution kotlin, utilisant la dernière réponse multiplateforme mentionnée par lakshman sai ...
Aucun Uri.toString inutile et Uri.parse cependant, cette réponse est claire et minimale:
la source
Vous pouvez lancer Google Maps Directions via une intention sur Android de cette façon
la source