it-swarm.com.de

Starten von Google Maps Directions über eine Absicht am Android

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?

375
Lars D

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.

602
Jan S.

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

118
Murphy

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);
95
David Thompson
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()));
29
Igor Bubelov

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);
17
lakshman sai

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.

5
Adeel Tariq

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

4
WannaBeGeek

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.

4
Ramesh kumar

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);
}
3
JediCate

Ö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:

  • d zum fahren
  • w zum Laufen
  • b zum Radfahren

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 .

3
SANAT

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

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

1
tony gil

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

  • Aktion
  • Uri

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