Meine App muss die Google Maps-Wegbeschreibungen von A nach B anzeigen, aber ich möchte Google Maps nicht in meine Anwendung einfügen, sondern mithilfe eines Intents starten. Ist das möglich? Wenn ja, wie?
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 Parameter und den Wert saddr
, um die Navigation von der aktuellen Position aus zu starten.
Sie können anstelle des Breiten- und Längengrads eine tatsächliche Straßenadresse verwenden. Dies gibt dem Benutzer jedoch die Möglichkeit, zwischen dem Öffnen über einen Browser oder über Google Maps zu wählen.
Dadurch wird Google Maps im Navigationsmodus direkt gestartet:
Intent intent = new Intent(Android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
[~ # ~] Update [~ # ~]
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.
Dies ist ein wenig abseits des Themas, weil Sie nach "Anweisungen" gefragt haben, aber Sie können auch das Geo-URI-Schema verwenden, das in der Android Documentation:
http://developer.Android.com/guide/appendix/g-app-intents.html
Das Problem bei der Verwendung von "geo: width, longitude" besteht darin, dass Google Maps nur an Ihrem Punkt zentriert ist, ohne PIN oder Bezeichnung.
Das ist ziemlich verwirrend, besonders wenn Sie auf einen bestimmten Ort zeigen oder/und nach dem Weg fragen müssen.
Wenn Sie den Abfrageparameter "geo: lat, lon? Q = name" verwenden, um Ihren Geopoint zu kennzeichnen, wird die Abfrage für die Suche verwendet und die lat/lon-Parameter werden verworfen.
Ich habe eine Möglichkeit gefunden, die Karte mit lat/lon zu zentrieren und eine Stecknadel mit einer benutzerdefinierten Beschriftung anzuzeigen. Sehr schön anzuzeigen und nützlich, wenn Sie nach dem Weg oder einer anderen Aktion fragen:
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 (aktuellste Version zum Zeitpunkt des Schreibens). Ignoriert die Koordinaten und sucht nach einem Objekt mit dem angegebenen Namen in Klammern. Siehe auch Absicht für Google Maps 7.0.0 mit Standort
Obwohl die aktuellen Antworten großartig sind, hat keine genau das getan, wonach ich gesucht habe. Ich wollte nur die Karten-App öffnen und einen Namen für jeden Quell- und Zielort hinzufügen. Die Verwendung des Geo-URI-Schemas würde für mich nicht funktionieren Da der Karten-Weblink überhaupt keine Beschriftungen hatte, habe ich diese Lösung gefunden, die im Wesentlichen eine Zusammenführung der anderen hier gemachten Lösungen und Kommentare darstellt. Es ist hoffentlich hilfreich, wenn andere 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), gehen Sie wie folgt vor
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 ist es eine gute Idee, die ActivityNotFoundException abzufangen, wenn der Benutzer die Karten-App nicht installiert hat. Dann können wir die Aktivität ohne Einschränkung der Karten-App erneut starten 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();
}
}
P.S. Alle in meinem Beispiel verwendeten Breiten- oder Längengrade sind nicht repräsentativ für meinen Standort. Die Ähnlichkeit mit einem wahren Standort ist reiner Zufall, auch wenn ich nicht aus Afrika stamme: P
EDIT:
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);
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()));
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);
Nun, Sie können versuchen, die integrierte Anwendung zu öffnen Android Maps mit dem Intent.setClassName
Methode.
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 Koordinatensatz ist Ihr Startort. Alle nächsten sind Wegpunkte, die geplottete Route geht durch.
Fügen Sie einfach weitere Wegpunkte hinzu, indem Sie am Ende "/ Breite, Länge" zusammenfassen. Es gibt anscheinend ein Limit von 23 Wegpunkten gemäß google docs . Ich bin mir nicht sicher, ob dies auch für Android gilt.
Wenn Sie die geografische Breite und Länge aus der aktuellen Richtung anzeigen möchten, können Sie Folgendes verwenden:
Anweisungen werden immer vom aktuellen Standort des Benutzers angegeben.
Die folgende Abfrage hilft Ihnen dabei. Sie können den Breiten- und Längengrad des Ziels hier 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 Standort anzeigen möchten, verwenden Sie:
google.navigation:q=a+street+address
Weitere Infos hier: Google Maps Intents für Android
Google DirectionsView
mit dem Quellspeicherort als aktuellem Speicherort und dem 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);
}
In der obigen Abbildung ist destinationCityName
eine Zeichenfolge, die nach Bedarf geändert werden kann.
Das hat bei mir funktioniert:
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);
}
Öffnen Sie Google Maps mit Intent in verschiedenen Modi:
Wir können die Google Maps-App mit folgender 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:
Sie können mehr über Absicht mit Google Maps finden hier .
Hinweis: Wenn es keine Route für das Fahrrad/Auto/zu Fuß gibt, wird angezeigt, dass Sie den Weg dorthin nicht finden können.
Sie können meine ursprüngliche Antwort überprüfen hier .
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 Features oder Tracks) kennen, können Sie eine KML-Datei zusammen mit Ihrer Absicht 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 unter this SO answer
HINWEIS: In diesem Beispiel wird eine Beispieldatei verwendet, die (ab 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, Android Dokumentation liefert uns eine sehr detaillierte allgemeine Absichten zur Implementierung der Kartenabsicht, die Sie zum Erstellen einer neuen benötigen Absicht mit zwei Parametern
Für die Aktion können wir Intent.ACTION_VIEW
und für Uri sollten wir es 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);
}