Lancement de Google Maps Directions via une intention sur Android

mon application doit montrer les directions de Google Maps De A à B, mais je ne veux pas mettre les Google Maps dans mon application - à la place, je veux le lancer en utilisant une intention. Est-ce possible? Si oui, comment?

335
demandé sur Reg Edit 2010-04-18 18:27:41

13 réponses

vous pourriez 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 et la valeur saddr .

vous pouvez utiliser une adresse réelle au lieu de la latitude et de la longitude. Toutefois, cela donnera à l'utilisateur un dialogue de choisir entre l'ouvrir via le navigateur ou Google Maps.

cela activera Google Maps en mode 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 universal, multi-plateforme Google Maps URLs:

https://developers.google.com/maps/documentation/urls/guide

vous pouvez également utiliser Intents avec la nouvelle API.

556
répondu Jan S. 2017-05-23 14:54:11

c'est un peu hors-sujet parce que vous avez demandé des "directions", mais vous pouvez également utiliser le schéma géographique 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 Centre seulement à votre point, sans aucune NIP ou étiquette.

c'est assez confus, surtout si vous avez besoin de pointez vers un endroit précis ou/et demandez des directions.

si vous utilisez le paramètre de requête "geo: lat, lon?q=name " afin d'étiqueter votre géopoint, il utilise la requête pour la recherche et rejette les paramètres lat/lon.

j'ai trouvé un moyen de centrer la carte avec lat/lon et d'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 (by @TheNail): Ne fonctionne pas dans Maps v. 7 (dernière version au moment de la rédaction). Ignorera les coordonnées et cherchera un objet avec le nom donné entre les parenthèses. Voir aussi l'Intention de Google Maps 7.0.0 avec emplacement

113
répondu Murphy 2017-05-23 12:10:42

bien que les réponses actuelles soient excellentes, aucune d'entre elles n'a fait tout ce que je cherchais, je voulais ouvrir l'application maps seulement, ajouter un nom pour chacun de l'emplacement de la source et de la destination, en utilisant le schéma de géo URI ne fonctionnerait pas du tout pour moi et le lien web maps n'a pas d'étiquettes donc j'ai trouvé cette solution, qui est essentiellement une fusion des autres solutions et des commentaires faits ici, espérons qu'il est utile à d'autres regardant 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 emplacement actuel comme point de départ (malheureusement, je n'ai pas trouvé le moyen d'étiqueter l'emplacement actuel), puis utiliser le suivant

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'a pas l'application maps 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 maps, nous pouvons être assez sûr que nous n'obtiendrons jamais le Toast à la fin depuis un internet browser 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. Toute latitude ou longitude utilisée dans mon exemple ne sont pas représentatifs de mon emplacement, Toute ressemblance à un endroit véritable est pure coïncidence, aka Je ne suis pas D'Afrique :p

EDIT:

pour les instructions, une intention de navigation est maintenant pris en charge avec google.navigation

Uri navigationIntentUri = Uri.parse("google.navigation:q=" + 12f +"," + 2f);//creating intent with latlng
Intent mapIntent = new Intent(Intent.ACTION_VIEW, navigationIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
83
répondu David Thompson 2018-10-02 13:56:56
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()));
19
répondu Igor Bubelov 2017-08-30 12:26:45

utilisant la dernière URLs de Google Maps multiplate-forme : Même si l'application GoogleMaps 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

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);
12
répondu lakshman sai 2017-06-05 09:35:15

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);
7
répondu Jonathan Caceres Romero 2015-03-07 07:52:28

essayez cette

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);
2
répondu Vijay Web Solutions 2014-12-16 12:12:23

pour les points de cheminement multiples, la suite peut aussi être utilisée.

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);

les premières coordonnées sont votre point de départ. Tous les suivants sont des points de chemin, tracé route passe par.

continue D'ajouter des points de cheminement en concevant "/ latitude, longitude " à la fin. Il y a apparemment une limite de 23 points de route selon google docs . Pas sûr si cela s'applique à Android aussi.

2
répondu Adeel Tariq 2017-05-23 12:05:21

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);
}
2
répondu JediCate 2017-05-27 15:37:53

si vous souhaitez afficher la Latitude et la Longitude à partir de la direction actuelle , vous pouvez utiliser ceci:

Les instructions

sont toujours données à partir de l'emplacement actuel de l'utilisateur.

la requête suivante vous aidera à effectuer cela . Vous pouvez passer la latitude et la longitude de destination ici:

google.navigation:q=latitude,longitude

utiliser ci-dessus en tant que:

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 via emplacement, utiliser:

google.navigation:q=a+street+address

plus d'informations ici: Google Maps Intentions pour Android

2
répondu WannaBeGeek 2017-08-07 18:32:28

si vous connaissez le point A, le point B (et toutes les fonctionnalités ou pistes entre les deux), 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 SORTE de réponse

NOTE: cet exemple utilise un fichier échantillon qui (à partir de mars13) est toujours en ligne. si elle est déconnectée, trouvez un fichier kml en ligne et changez votre url

1
répondu tony gil 2017-05-23 12:26:27

Google DirectionsView avec l'emplacement de la source comme un emplacement actuel et l'emplacement de la destination comme une chaîne de caractères

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&daddr="+destinationCityName));
intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

dans le paragraphe ci-dessus destinationCityName est une chaîne de caractères modifiable selon les besoins.

1
répondu Ramesh kumar 2018-06-07 13:32:01

tout d'abord, vous avez besoin de Maintenant que vous pouvez utiliser l'intention implicite, la documentation android nous fournir un intentions communes pour mettre en œuvre l'intention du PAM, vous devez créer une nouvelle intention avec deux paramètres

  • Action
  • Uri

Pour l'action, nous pouvons utiliser des 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 le 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);
    }
0
répondu Bachiri Taoufiq Abderrahman 2017-01-21 13:54:38