Mon application doit afficher 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?Lancer Google Maps Directions via une intention sur Android
Répondre
Vous pouvez utiliser quelque chose comme ceci:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);
Pour démarrer la navigation à partir de l'emplacement actuel, supprimez le paramètre saddr
et la valeur.
Vous pouvez utiliser une adresse municipale 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 ouvrira Google Maps en mode de navigation directement:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
MISE À JOUR
En mai 2017 Google a lancé la nouvelle API pour cross-plate-forme universelle, URL Google Maps:
https://developers.google.com/maps/documentation/urls/guide
Vous pouvez également utiliser Intents avec la nouvelle API.
Ceci est un peu hors-sujet parce que vous avez demandé "directions", mais vous pouvez également utiliser le schéma d'URI Geo décrit dans la documentation Android:
http://developer.android.com/guide/appendix/g-app-intents.html
Le problème en utilisant « geo: latitude , longitude "est que Google Maps n'est centré que sur votre point, sans pin ni étiquette.
C'est assez déroutant, surtout si vous avez besoin de pointer vers un endroit précis et/ou demander des indications.
Si vous utilisez le paramètre de requête "geo: lat, lon? Q = nom" pour étiqueter votre géopoint, il utilise la requête de recherche et ignore les paramètres lat/lon.
J'ai trouvé un moyen de centrer la carte avec la latitude/longitude et afficher une broche avec une étiquette personnalisée, très agréable à afficher et utile pour demander des directions ou toute autre action:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
NOTE (par @TheNail): Ne fonctionne pas dans Maps v.7 (dernière version au moment de l'écriture). Ignorera les coordonnées et recherchera un objet avec le nom donné entre les parenthèses. Voir aussi Intent for Google Maps 7.0.0 with location
Nice, le géo par défaut: 0,0 ne fait que déplacer la carte là-bas Cette solution ["geo: 0,0? q = 37.423156, -122.084917 (" + name + ")"] vous permet de mettre votre propre nom de marqueur Merci – gnac
ci-dessus fonctionne également avec Uri.parse ("geo: 0,0? q = personnalisé + adresse (" + nom + ")") Exactl y ce que je veux voulait. Merci. – anargund
Fonctionne bien - fyi ne semble pas fonctionner en conjonction avec le paramètre de requête "z" (niveau de zoom) – scolestock
Si vous connaissez le point A, le point B (ainsi que les caractéristiques ou les pistes intermédiaires), vous pouvez utiliser un fichier KML avec votre intention.
String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
pour plus d'informations, consultez this SO answer
REMARQUE: cet exemple utilise un fichier exemple (en mar13) est toujours en ligne.si elle est déconnectée, trouver un fichier kml en ligne et changer votre url
Lorsque vous appuyez sur le bouton de retour à partir de l'application maps, un écran noir s'affiche et l'activité sous-jacente est recréée.Avez-vous une idée pour résoudre ce problème? – Jas
@Jas, google a changé beaucoup de ses API et ce comportement a peut-être changé aussi. J'utilise exclusivement des cartes ouvertes depuis un certain temps maintenant, donc je serais en mesure de vous aider. :) –
Bien que les réponses actuelles soient excellentes, aucune d'entre elles n'a fait ce que je cherchais, je voulais ouvrir l'application de cartes seulement, ajouter un nom pour chaque emplacement source et destination, en utilisant le schéma de géo URI ne fonctionnerait pas du tout pour moi et le lien web des cartes n'avait pas d'étiquettes donc je suis venu avec cette solution, qui est essentiellement une fusion des autres solutions et commentaires fait ici, j'espère que c'est utile pour les autres qui regardent cette question.
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", sourceLatitude, sourceLongitude, "Home Sweet Home", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
Pour utiliser votre position actuelle comme point de départ (malheureusement je ne l'ai pas trouvé un moyen d'étiqueter l'emplacement actuel) puis utilisez les éléments suivants
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);
Pour être complet, si l'utilisateur n » Si l'application maps est installée, alors il sera judicieux d'attraper ActivityNotFoundException, puis nous pourrons recommencer l'activité sans la restriction de l'application maps, nous pouvons être sûrs que nous n'obtiendrons jamais le Toast à la fin, car navigateur Internet est une application valide pour lancer ce schéma d'url aussi.
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", 12f, 2f, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
try
{
startActivity(intent);
}
catch(ActivityNotFoundException ex)
{
try
{
Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(unrestrictedIntent);
}
catch(ActivityNotFoundException innerEx)
{
Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show();
}
}
P.S. Toutes les latitudes ou longitudes utilisées dans mon exemple ne sont pas représentatifs de mon emplacement, toute ressemblance avec un véritable emplacement est un pur hasard, alias Je ne suis pas d'Afrique: P
EDIT:
Pour les directions, une intention de navigation est désormais pris en charge avec google.navigation
Uri navigationIntentUri = Uri.parse("google.navigation:q=" + 12f " +"," + 2f);
Intent mapIntent = new Intent(Intent.ACTION_VIEW, navigationIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Ceci est une excellente réponse David! Savez-vous également comment vraiment commencer la navigation à l'intérieur de l'application de navigation? Dans son état actuel, l'utilisateur doit cliquer sur 'Démarrer la navigation' une dernière fois. J'ai cherché Google pour tout paramètre à passer, mais je n'en ai trouvé aucun. – Nirmal
pouvons-nous ajouter la fenêtre d'information de marqueur sur son sur clic? –
Lorsque vous appuyez sur le bouton de retour à partir de l'application maps, un écran noir s'affiche et l'activité sous-jacente est recréée.Avez-vous une idée de comment résoudre ce problème? – Jas
essayer
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+src_lat+","+src_ltg+"&daddr="+des_lat+","+des_ltg));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
Eh bien, vous pouvez essayer d'ouvrir l'application intégrée Android Maps en utilisant la méthode Intent.setClassName
.
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:37.827500,-122.481670"));
i.setClassName("com.google.android.apps.maps",
"com.google.android.maps.MapsActivity");
startActivity(i);
D'abord, vous devez maintenant que vous pouvez utiliser l'intention implicite, la documentation android nous fournir une très détaillée common intents pour mettre en œuvre l'intention de carte, vous devez créer une nouvelle intention avec deux paramètres
- action
- Uri
Pour une action que nous pouvons utiliser Intent.ACTION_VIEW
et pour Uri nous devrions le construire, ci-dessous j'ai joint un exemple de code pour créer, construire, démarrer l'activité.
String addressString = "1600 Amphitheatre Parkway, CA";
/*
Build the uri
*/
Uri.Builder builder = new Uri.Builder();
builder.scheme("geo")
.path("0,0")
.query(addressString);
Uri addressUri = builder.build();
/*
Intent to open the map
*/
Intent intent = new Intent(Intent.ACTION_VIEW, addressUri);
/*
verify if the devise can launch the map intent
*/
if (intent.resolveActivity(getPackageManager()) != null) {
/*
launch the intent
*/
startActivity(intent);
}
L'utilisation d'Uri.Builder ne fonctionne que pour les URI absolus, sous la forme de:'
Voir aussi cette réponse pour une explication de pourquoi votre réponse ne fonctionne pas : http://stackoverflow.com/a/12035226/313113 – bitek
Pour les points de passage multiples, les éléments suivants peuvent également être utilisés.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("https://www.google.com/maps/dir/48.8276261,2.3350114/48.8476794,2.340595/48.8550395,2.300022/48.8417122,2.3028844"));
startActivity(intent);
Le premier ensemble de coordonnées est votre emplacement de départ. Tous les suivants sont des points de cheminement, l'itinéraire tracé traverse.
Continuez à ajouter des points de cheminement en indiquant "/ latitude, longitude" à la fin. Il y a apparemment une limite de 23 points de passage selon google docs. Je ne sais pas si cela s'applique également à Android.
Ne fonctionne pas, pouvez-vous aider? –
Qu'est-ce qui ne fonctionne pas? Que voyez-vous en exécutant ce code exact? –
En fait, n'utilisez pas les coordonnées exactes que je mets ici. Ils sont au milieu de nulle part, quelque part sans routes autour de sorte que cela ne fonctionnera pas. –
C'est ce qui a fonctionné pour moi:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://maps.google.co.in/maps?q=" + yourAddress));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
En utilisant les dernières URL multi-plateforme Google Maps: Même si l'application Google Maps est manquant, il ouvrira dans le navigateur
Exemple https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("www.google.com").appendPath("maps").appendPath("dir").appendPath("").appendQueryParameter("api", "1")
.appendQueryParameter("destination", 80.00023 + "," + 13.0783);
String url = builder.build().toString();
Log.d("Directions", url);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Si vous souhaitez afficher la latitude et la longitude à partir du curr ent direction, vous pouvez utiliser ceci:
Les directions sont toujours données à partir de l'emplacement actuel des utilisateurs.
La requête suivante vous aidera à effectuer cela. Vous pouvez passer la latitude de destination et la longitude ici:
google.navigation:q=latitude,longitude
utilisation ci-dessus:
Uri gmmIntentUri = Uri.parse("google.navigation:q=latitude,longitude");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
Ou si vous voulez montrer par emplacement, utilisez:
google.navigation:q=a+street+address
Plus d'info ici: Google Maps Intents for Android
Uri.Builder directionsBuilder = new Uri.Builder()
.scheme("https")
.authority("www.google.com")
.appendPath("maps")
.appendPath("dir")
.appendPath("")
.appendQueryParameter("api", "1")
.appendQueryParameter("destination", lat + "," + lon);
startActivity(new Intent(Intent.ACTION_VIEW, directionsBuilder.build()));
excellent! Je pense que votre réponse doit être la première depuis que la nouvelle API est arrivée. – Mogi
- 1. directions Google Maps format texte
- 2. Lancer l'application Google Maps
- 3. Google Maps - Ajouter deux marqueurs (directions)
- 4. google maps ouvertes aux directions de bus
- 5. écrasante grande popup sur les directions Google Maps
- 6. Intention: Android
- 7. Lancer Google Maps à partir de l'application
- 8. intention de navigation Google (Android 1.6)
- 9. android obtenir et parser Google Directions
- 10. Accéder à des éléments Google Maps individuels (Distance, heure, directions)
- 11. Google Maps dans android
- 12. Android Coordonnées Google Maps
- 13. Intention sur Android
- 14. API Google Maps [API Directions] Limitation des waypoints?
- 15. Google maps dans Android
- 16. marqueur gps sur google maps android
- 17. google maps exporter les directions au fichier kml - java geogoogle
- 18. Problèmes avec les directions API Google Maps V3 et jQuery
- 19. Autoriser l'utilisateur à ajouter des directions sur une carte (google maps API)
- 20. Recevoir une intention explicite. Android
- 21. Google Directions API - obtenir une réponse XML sans balise HTML
- 22. Google Maps GDirections - Itinéraire entre deux points sur une carte
- 23. Android: Auto Actualiser Google Maps
- 24. Android Google Maps n'affiche pas
- 25. Android Google Directions Service utilisable nativement? avec cadre d'emballage? Directions de transport en commun/vélo disponibles?
- 26. Android Gesture Directions
- 27. Comment puis-je extraire la distance de l'API Google Directions via une requête Web Excel?
- 28. Comment puis-je ouvrir Google Maps pour les directions en utilisant les coordonnées sur l'iphone
- 29. Comment obtenir Google Maps Transport en commun Directions sur demande côté serveur HTTP
- 30. Comment lancer une commande système via Javascript dans Google Chrome?
Y at-il de toute façon pour supprimer le dialogue ??? et que ce soit juste l'application de carte – molleman
Pas que je sois conscient de. Cependant, il n'y aura pas de boîte de dialogue si l'utilisateur a déjà choisi l'application par défaut pour ouvrir ce type d'intentions pour être l'application cartographique. –
Si vous voulez vous débarrasser de la boîte de dialogue, vous pouvez indiquer à l'intention quel paquet vous voulez utiliser. Avant le startActivity() ajoutez ceci: 'intent.setClassName (" com.google.android.apps.maps "," com.google.android.maps.MapsActivity ");' –