Antworten:
Sie könnten so etwas verwenden:
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);
Entfernen Sie den saddr
Parameter und den Wert , um die Navigation vom aktuellen Standort aus zu starten .
Sie können anstelle von Breiten- und Längengrad eine tatsächliche Adresse verwenden. Dies gibt dem Benutzer jedoch einen Dialog, in dem er zwischen dem Öffnen über einen Browser oder Google Maps wählen kann.
Dadurch wird Google Maps direkt im Navigationsmodus gestartet:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
AKTUALISIEREN
Im Mai 2017 hat Google die neue API für universelle, plattformübergreifende Google Maps-URLs veröffentlicht:
https://developers.google.com/maps/documentation/urls/guide
Sie können Intents auch mit der neuen API verwenden.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Dies ist ein wenig abseits des Themas, da Sie nach "Anweisungen" gefragt haben. Sie können jedoch auch das in der Android-Dokumentation beschriebene Geo-URI-Schema verwenden:
http://developer.android.com/guide/appendix/g-app-intents.html
Das Problem bei der Verwendung von "Geo: Breite, Länge" besteht darin, dass Google Maps nur an Ihrem Punkt zentriert ist, ohne Stift oder Beschriftung.
Das ist ziemlich verwirrend, besonders wenn Sie auf einen genauen Ort zeigen oder / und nach dem Weg fragen müssen.
Wenn Sie den Abfrageparameter "geo: lat, lon? Q = name" verwenden, um Ihren Geopunkt zu kennzeichnen, wird die Abfrage zum Suchen und Löschen der lat / lon-Parameter verwendet.
Ich habe einen Weg gefunden, die Karte mit lat / lon zu zentrieren und eine Stecknadel mit einem benutzerdefinierten Etikett anzuzeigen, die sehr schön anzuzeigen ist und nützlich ist, wenn ich nach dem Weg oder einer anderen Aktion frage:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
HINWEIS (von @TheNail): Funktioniert nicht in Maps v.7 (neueste Version zum Zeitpunkt des Schreibens). Ignoriert die Koordinaten und sucht nach einem Objekt mit dem angegebenen Namen zwischen den Klammern. Siehe auch Absicht für Google Maps 7.0.0 mit Standort
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
Obwohl die aktuellen Antworten großartig sind, hat keiner von ihnen genau das getan, wonach ich gesucht habe. Ich wollte nur die Karten-App öffnen und einen Namen für jeden Quellort und jedes Ziel hinzufügen. Die Verwendung des Geo-URI-Schemas würde für mich nicht funktionieren Der Weblink für Karten hatte überhaupt keine Beschriftungen, daher habe ich diese Lösung entwickelt, die im Wesentlichen eine Zusammenführung der anderen hier gemachten Lösungen und Kommentare darstellt. Hoffentlich ist sie für andere hilfreich, die diese Frage betrachten.
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);
Um Ihren aktuellen Standort als Ausgangspunkt zu verwenden (leider habe ich keine Möglichkeit gefunden, den aktuellen Standort zu kennzeichnen), verwenden Sie Folgendes
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);
Der Vollständigkeit halber: Wenn der Benutzer die Karten-App nicht installiert hat, ist es eine gute Idee, die ActivityNotFoundException abzufangen. Dann können wir die Aktivität ohne Einschränkung der Karten-App erneut starten. Wir können ziemlich sicher sein, dass wir sie niemals erhalten zum Toast am Ende, da ein Internetbrowser eine gültige Anwendung ist, um auch dieses URL-Schema zu starten.
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 Alle in meinem Beispiel verwendeten Breiten- oder Längengrade sind nicht repräsentativ für meinen Standort. Eine Ähnlichkeit mit einem echten Standort ist reiner Zufall, auch wenn ich nicht aus Afrika stamme: P.
BEARBEITEN:
Für Wegbeschreibungen wird jetzt eine Navigationsabsicht mit google.navigation unterstützt
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);
Verwenden der neuesten plattformübergreifenden Google Maps-URLs : Auch wenn die Google Maps-App fehlt, wird sie im Browser geöffnet
Beispiel 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);
Öffnen Sie Google Maps mit Intent in verschiedenen Modi:
Wir können die Google Maps App mit Absicht öffnen:
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)
Hier ist "mode = b" für Fahrrad.
Wir können den Fahr-, Geh- und Fahrradmodus einstellen, indem wir Folgendes verwenden:
Weitere Informationen zu Absichten mit Google Maps finden Sie hier .
Hinweis: Wenn es keine Route für Fahrrad / Auto / Spaziergang gibt, wird angezeigt, dass der Weg dorthin nicht gefunden werden kann.
Sie können meine ursprüngliche Antwort hier überprüfen .
Nun, Sie können versuchen, die integrierte Anwendung Android Maps mithilfe der Intent.setClassName
Methode zu öffnen .
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);
Für mehrere Wegpunkte kann auch Folgendes verwendet werden.
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);
Der erste Satz von Koordinaten ist Ihr Startort. Alle nächsten sind Wegpunkte, die geplante Route führt durch.
Fügen Sie einfach weitere Wegpunkte hinzu, indem Sie am Ende "/ Breite, Länge" angeben. Laut Google Docs gibt es anscheinend ein Limit von 23 Wegpunkten . Ich bin mir nicht sicher, ob dies auch für Android gilt.
Wenn Sie den Breiten- und Längengrad aus der aktuellen Richtung anzeigen möchten, können Sie Folgendes verwenden:
Anweisungen werden immer vom aktuellen Standort des Benutzers gegeben.
Die folgende Abfrage hilft Ihnen dabei. Hier können Sie den Breiten- und Längengrad des Ziels eingeben:
google.navigation:q=latitude,longitude
Verwenden Sie oben als:
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);
Oder wenn Sie über den Ort anzeigen möchten, verwenden Sie:
google.navigation:q=a+street+address
Weitere Informationen hier: Google Maps Intents für Android
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google DirectionsView
mit Quellspeicherort als aktuellem Standort und Zielspeicherort als Zeichenfolge
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);
}
Oben destinationCityName
ist eine Zeichenfolge variabel, die nach Bedarf geändert werden kann.
Versuche dies
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);
Wenn Sie Punkt A, Punkt B (und alle dazwischen liegenden Funktionen oder Spuren) kennen, können Sie zusammen mit Ihrer Absicht eine KML-Datei verwenden.
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);
Weitere Informationen finden Sie in dieser SO-Antwort
HINWEIS: In diesem Beispiel wird eine Beispieldatei verwendet, die (Stand: März 13) noch online ist. Wenn es offline gegangen ist, suchen Sie eine kml-Datei online und ändern Sie Ihre URL
Zuerst müssen Sie jetzt, da Sie die implizite Absicht verwenden können, die Android-Dokumentation liefert uns sehr detaillierte allgemeine Absichten für die Implementierung der Kartenabsicht, die Sie benötigen, um eine neue Absicht mit zwei Parametern zu erstellen
Für Aktionen, die wir verwenden können, Intent.ACTION_VIEW
und für Uri sollten wir sie erstellen. Unten habe ich einen Beispielcode angehängt, um die Aktivität zu erstellen, zu erstellen und zu starten.
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>
nicht für undurchsichtige URIs <scheme>:<opaque part>#<fragment>
. Der obige Code liefert den folgenden URI: geo:/0%2C0?Eiffel%20Tower
Dadurch stürzt die Google Maps-App ab. Sogar die offizielle Dokumentation verwendet aus diesem Grund rohe / undurchsichtige URIs. Der richtige Code wäre dann:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Eine nette Kotlin-Lösung, die die neueste plattformübergreifende Antwort von lakshman sai verwendet ...
Kein unnötiger Uri.toString und der Uri.parse, diese Antwort ist sauber und minimal:
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
})
Auf diese Weise können Sie Google Maps Directions über eine Absicht auf Android starten
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);
}
}
});