Réponses:
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 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:
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 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.
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:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
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
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.
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 n'ai pas trouvé de moyen d'étiqueter la position actuelle), utilisez ce qui suit
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 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.
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();
}
}
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
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);
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
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);
Ouvrez Google Maps en utilisant Intent avec différents modes:
Nous pouvons ouvrir l'application Google Maps en utilisant l'intention:
val gmmIntentUri = Uri.parse("google.navigation:q="+destintationLatitude+","+destintationLongitude + "&mode=b")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
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 .
Eh bien, vous pouvez essayer d'ouvrir l'application Android Maps intégrée en utilisant la Intent.setClassName
méthode.
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);
Pour les points de cheminement 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 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.
Si vous souhaitez afficher la latitude et la longitude de la direction actuelle, vous pouvez utiliser ceci:
Les directions sont toujours données à partir de l'emplacement actuel de l'utilisateur.
La requête suivante vous aidera à effectuer cela. Vous pouvez transmettre la latitude et la longitude de destination ici:
google.navigation:q=latitude,longitude
Utilisez ci-dessus comme:
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 souhaitez afficher via l'emplacement, utilisez:
google.navigation:q=a+street+address
Plus d'informations ici: Google Maps Intents pour Android
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îne
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 ce qui précède, destinationCityName
une chaîne variable peut être modifiée selon les besoins.
essaye ça
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);
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.
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 (à partir de mar13) est toujours en ligne. s'il est hors ligne, recherchez un fichier kml en ligne et modifiez votre URL
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é.
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);
}
<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:
val intentUri = Uri.Builder().apply {
scheme("https")
authority("www.google.com")
appendPath("maps")
appendPath("dir")
appendPath("")
appendQueryParameter("api", "1")
appendQueryParameter("destination", "${yourLocation.latitude},${yourLocation.longitude}")
}.build()
startActivity(Intent(Intent.ACTION_VIEW).apply {
data = intentUri
})
Vous pouvez lancer Google Maps Directions via une intention sur Android de cette façon
btn_search_route.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String source = et_source.getText().toString();
String destination = et_destination.getText().toString();
if (TextUtils.isEmpty(source)) {
et_source.setError("Enter Soruce point");
} else if (TextUtils.isEmpty(destination)) {
et_destination.setError("Enter Destination Point");
} else {
String sendstring="http://maps.google.com/maps?saddr=" +
source +
"&daddr=" +
destination;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(sendstring));
startActivity(intent);
}
}
});