442 votes

Lancement de Google Maps Directions via une intention sur Android

Mon application doit afficher les directions Google Maps de A à B, mais je ne souhaite pas mettre Google Maps dans mon application. Au lieu de cela, je souhaite la lancer à l'aide d'une intention. Est-ce possible? Si oui, comment?

673voto

Jan S. Points 4905

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, retirez l' saddr paramètre et la valeur.

Vous pouvez utiliser un nom de la rue au lieu de la latitude et de la longitude. Toutefois, cela donnera à l'utilisateur une boîte de dialogue pour choisir entre l'ouverture via un navigateur ou Google Maps.

Si vous êtes aux états-unis, vous pouvez utiliser de façon officieuse (Car il n'est pas officiel, je ne recommande pas de l'utiliser). Cela va ouvrir Google Maps en mode de navigation. N'ai pas joué avec elle car où je vis, il n'est pas disponible.

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
    Uri.parse("google.navigation:q=an+address+city"));

133voto

Murphy Points 1808

C'est un peu hors-sujet parce que vous avez demandé "directions", mais vous pouvez également utiliser la Géo schéma d'URI décrit dans l'Android Documentation:

http://developer.android.com/guide/appendix/g-app-intents.html

Le problème à l'aide de "géo:la latitude,la longitude", c'est que Google Maps seuls centres à votre point de vue, sans aucune broche ou l'étiquette.

C'est assez déroutant, surtout si vous devez pointer vers un endroit précis ou/et de demander des directions.

Si vous utilisez le paramètre de requête "geo:lat,lon?q=nom" pour l'étiquette de votre geopoint, il utilise la requête de la recherche et de rejeter le lat/lon paramètres.

J'ai trouvé un moyen pour centrer la carte avec les coordonnées lat/lon et afficher une broche avec une étiquette personnalisée, très agréable pour l'affichage et l'utile lorsque vous demandez votre chemin, 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): Pas de travail dans les Cartes v. 7 (dernière version au moment de la rédaction). Ignore les coordonnées et la recherche d'un objet avec le nom donné entre parenthèses. Voir aussi l'Intention de Google Maps 7.0.0 avec emplacement

106voto

David Thompson Points 887

Bien que les réponses sont grands, aucun d'entre eux n'ont tout à fait ce que je cherchais, je voulais ouvrir l'application cartes seulement, ajoutez un nom pour chaque emplacement de la source et de destination, à l'aide de la géo schéma d'URI ne fonctionnerait pas pour moi du tout, et les cartes de lien web n'ont pas les étiquettes alors je suis venu avec cette solution, qui est essentiellement une fusion de l'autre des solutions et des commentaires ici, j'espère que c'est utile à d'autres personnes de la visualisation à 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.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

Pour utiliser votre emplacement actuel comme point de départ (malheureusement, je n'ai pas trouvé un moyen de l'étiquette à l'emplacement actuel) puis utilisez la commande suivante

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.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);

Pour être complet, si l'utilisateur ne dispose pas de l'application maps installé, alors ça va être une bonne idée d'attraper le ActivityNotFoundException, alors nous pouvons commencer la reprise de l'activité sans l'application cartes de restriction, nous pouvons être à peu près sûr que nous n'arriverons jamais à le Toast à la fin, depuis un navigateur internet, la demande est valable pour le lancement de ce schéma d'url.

        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.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
        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 des longitudes utilisé dans mon exemple ne sont pas représentatifs de mon emplacement, toute ressemblance avec un vrai emplacement est un pur hasard, en l'occurence, je ne suis pas de l'Afrique :P

1voto

tony gil Points 2966

Si vous connaissez le point A, le point B (et toutes 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, voir cette réponse SO

Remarque: cet exemple utilise un exemple de fichier qui (en date de mars13) est toujours en ligne. s'il est déconnecté, trouvez un fichier kml en ligne et changez votre URL

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