Die Google Maps App für Android bietet verschiedene Intents, mit denen Sie Google Maps im Anzeige-, Such-, Navigations- oder Street View-Modus starten können. Wenn Sie eine Karte in Ihre App einbetten möchten, lesen Sie den Startleitfaden für die Google Maps Android API.
Überblick
Mit Intents können Sie eine Aktivität in einer anderen App starten, indem Sie eine einfache Aktion in einem Intent
-Objekt beschreiben, die Sie ausführen möchten (z. B. „Karte anzeigen“ oder „Wegbeschreibung zum Flughafen anzeigen“). Die Google Maps App für Android unterstützt verschiedene Intents. Sie können die Google Maps App starten und eine von vier Aktionen ausführen:
- Anzeigen einer Karte für einen angegebenen Standort mit einer bestimmten Zoomstufe
- Suchen und Anzeigen von Orten auf einer Karte
- Anfordern einer Route von einem Ort zu einem anderen. Routen können für drei Verkehrsmittel zurückgegeben werden: Auto, zu Fuß, Fahrrad.
- Panoramabilder in Google Street View anzeigen
Auf dieser Seite werden die Intents beschrieben, die Sie mit der Google Maps App für Android verwenden können. Weitere Informationen zu Intents und Intent-Filtern bzw. auf der Android-Plattform gängigen Intents finden Sie in der Dokumentation für Android-Entwickler.
Intent-Anfragen
Um Google Maps mit einem Intent zu starten, müssen Sie zuerst ein Intent
-Objekt erstellen und dessen Aktion, URI und Paket angeben.
- Aktion: Alle Google Maps-Intents werden als Aufrufaktion
ACTION_VIEW
aufgerufen. - URI: Google Maps-Intents verwenden URL-codiert, um die gewünschte Aktion sowie einige Daten zum Ausführen der Aktion anzugeben.
- Paket: Durch Aufrufen von
setPackage("com.google.android.apps.maps")
wird der Intent von der Google Maps App für Android verarbeitet. Wenn das Paket nicht festgelegt ist, bestimmt das System, welche AnwendungenIntent
verarbeiten können. Wenn mehrere Apps verfügbar sind, wird der Nutzer möglicherweise gefragt, welche App er verwenden möchte.
Nach dem Erstellen von Intent
können Sie auf verschiedene Arten anfordern, dass das System die zugehörige Anwendung startet. Eine gängige Methode besteht darin, Intent
an die Methode startActivity()
zu übergeben. Das System startet die erforderliche App – in diesem Fall Google Maps – und startet das entsprechende Activity
.
Java
// Create a Uri from an intent string. Use the result to create an Intent. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps"); // Attempt to start an activity that can handle the Intent startActivity(mapIntent);
Kotlin
// Create a Uri from an intent string. Use the result to create an Intent. val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") // Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) // Make the Intent explicit by setting the Google Maps package mapIntent.setPackage("com.google.android.apps.maps") // Attempt to start an activity that can handle the Intent startActivity(mapIntent)
Wenn das System keine App identifizieren kann, die auf den Intent reagieren kann, kann Ihre App abstürzen. Aus diesem Grund sollten Sie zuerst prüfen, ob eine empfangende Anwendung installiert ist, bevor Sie einem Nutzer einen dieser Intents präsentieren.
Wenn Sie prüfen möchten, ob eine Anwendung für den Empfang des Intents verfügbar ist, rufen Sie für Ihr Intent
-Objekt resolveActivity()
auf. Ist das Ergebnis nicht null, gibt es mindestens eine Anwendung, die den Intent verarbeiten kann, und Sie können startActivity()
bedenkenlos aufrufen.
Ist das Ergebnis null
, sollten Sie den Intent nicht verwenden und nach Möglichkeit das Feature deaktivieren, das den Intent aufruft.
Java
if (mapIntent.resolveActivity(getPackageManager()) != null) { ... }
Kotlin
mapIntent.resolveActivity(packageManager)?.let { ... }
Um eine Karte von San Francisco anzuzeigen, können Sie beispielsweise folgenden Code verwenden.
Java
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); if (mapIntent.resolveActivity(getPackageManager()) != null) { startActivity(mapIntent); }
Kotlin
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") mapIntent.resolveActivity(packageManager)?.let { startActivity(mapIntent) }
URL-codierte Abfragestrings
Alle Zeichenfolgen, die an die Google Maps-Intents weitergegeben werden, müssen URI-codiert werden. Der String "1st & Pike, Seattle" sollte beispielsweise 1st%20%26%20Pike%2C%20Seattle
werden.
Leerzeichen in der Zeichenfolge können mit „%20“ codiert oder durch das Pluszeichen (+) ersetzt werden.
Mit der Methode android.net.Uri
parse()
können Sie Strings codieren.
Beispiel:
Java
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));
Kotlin
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))
Eine Karte anzeigen
Verwenden Sie den Intent geo:
, um eine Karte an einer bestimmten Position und mit einem bestimmten Zoomfaktor anzuzeigen.
geo:latitude,longitude?z=zoom
Parameter
latitude
undlongitude
legen den Mittelpunkt der Karte fest.- Mit
z
wird optional die anfängliche Zoomstufe der Karte festgelegt. Zulässige Werte reichen von 0 (die ganze Welt) bis 21 (einzelne Gebäude). Die Obergrenze kann je nach den für den ausgewählten Ort verfügbaren Kartendaten variieren.
Beispiele
Java
// Creates an Intent that will load a map of San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Creates an Intent that will load a map of San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Nach einem Standort suchen
Mithilfe dieses Intents können Sie Suchabfragen innerhalb eines bestimmten Viewports anzeigen. Wenn die Abfrage ein einzelnes Ergebnis liefert, können Sie mit diesem Intent eine Markierung für einen bestimmten Ort oder eine bestimmte Adresse anzeigen lassen, z. B. eine Sehenswürdigkeit, ein Unternehmen, ein geografisches Merkmal oder eine Stadt.
geo:latitude,longitude?q=query geo:0,0?q=my+street+address geo:0,0?q=latitude,longitude(label)
Parameter
Zusätzlich zu den Parametern, die zum Anzeigen einer Karte verwendet werden, unterstützt die Google Suche die folgenden Parameter:
q
definiert den oder die Orte, die auf der Karte markiert werden sollen. Der Parameterq
ist für alle Suchanfragen erforderlich. Standorte können als Ortsname oder Adresse angegeben werden. Der String muss URL-codiert sein. Eine Adresse wie „City Hall, New York, NY“ sollte also in „City+Hall,New+York,NY“ umgewandelt werden.Mit
label
können Sie ein benutzerdefiniertes Label für einen auf der Karte identifizierten Ort festlegen.label
muss als String angegeben werden.
Kategorische Suche
Wenn Sie einen allgemeinen Suchbegriff übergeben, wird in Google Maps versucht, einen Standort in der Nähe der angegebenen geografischen Breite/Länge zu finden, der Ihren Kriterien entspricht. Wenn Sie keinen Standort angeben, sucht Google Maps nach Orten in der Nähe. Beispiel:
Java
// Search for restaurants nearby Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Search for restaurants in San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Search for restaurants nearby val gmmIntentUri = Uri.parse("geo:0,0?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Search for restaurants in San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Sie können die Suchergebnisse zusätzlich gewichten, indem Sie zusammen mit dem Abfragestring einen Zoomparameter angeben. Im folgenden Beispiel wird mit einem Zoomfaktor von 10 versucht, Restaurants auf Stadtebene und nicht in der Nähe zu finden.
Java
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Standortsuche
Bei der Suche nach einer Adresse wird eine Pinnadel an diesem Standort angezeigt.
Java
Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Im Beispiel oben wird ein Breiten-/Längengrad von 0
,0
festgelegt, aber eine Adresse wird als Abfragestring übergeben. Bei der Suche nach einem sehr spezifischen Ort sind Breiten- und Längengrade nicht erforderlich. Wenn Sie die genaue Adresse jedoch nicht kennen, können Sie versuchen, die Ergebnisse der Suche durch Angabe einer Koordinate zu beeinflussen. Beispielsweise werden bei einer Adresssuche nach „Hauptstraße“ zu viele Ergebnisse zurückgegeben.
Java
// Searching for 'Main Street' will return too many results Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
Kotlin
// Searching for 'Main Street' will return too many results val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")
Wenn Sie dem Intent-URI „lat/lng“ hinzufügen, werden die Ergebnisse nach einem bestimmten Bereich gewichtet:
Java
// Searches for 'Main Street' near San Francisco Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Searches for 'Main Street' near San Francisco val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Wenn Sie wissen, dass bei der Suche ein einzelner Wert zurückgegeben wird, können Sie ein optionales Label übergeben. Labels müssen als String angegeben werden. Sie werden unter der Kartenmarkierung angezeigt. Labels sind nur verfügbar, wenn q
als Breiten-/Längenkoordinaten angegeben ist.
Java
// Display a label at the location of Google's Sydney office Uri gmmIntentUri = Uri.parse("geo:0,0?q=Google+Sydney@-33.8666,151.1957"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Display a label at the location of Google's Sydney office val gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Als Alternative zu einer Adresse oder einem Breiten-/Längengrad können Sie auch mithilfe eines Plus Codes eine Markierung an einem bekannten Standort einblenden.
Java
// Display the location of Google, San Francisco using a global plus code. Uri gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX"); // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco"); // Construct and use the Intent as in the examples above
Kotlin
// Display the location of Google, San Francisco using a global plus code. var gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX") // Equivalently, define the same location using a local plus code gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco") // Construct and use the Intent as in the examples above
Detaillierte Routenführung wird gestartet
Verwenden Sie diesen Intent, um die Google Maps-Navigation mit einer detaillierten Routenführung zu der angegebenen Adresse oder Koordinate zu starten. Wegbeschreibungen werden immer vom aktuellen Standort des Nutzers aus angegeben.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
Parameter
q
: Legt den Endpunkt für Navigationssuchen fest. Dieser Wert kann ein Breiten- und Längengrad oder eine Adresse im Abfrageformat sein. Wenn es sich um einen Abfragestring handelt, der mehr als ein Ergebnis zurückgibt, wird das erste Ergebnis ausgewählt.Mit
mode
wird die Mobilitätsform festgelegt. Der Modus ist optional und kann auf eine der folgenden Optionen festgelegt werden:d
zum Fahren (Standard)b
zum Radfahrenl
für Motorradw
zu Fuß
avoid
legt Funktionen fest, die bei der Route vermieden werden sollten. „Vermeiden“ ist optional und kann auf eine oder mehrere der folgenden Werte festgelegt werden:t
für Mautgebührenh
für Autobahnenf
für Fähren
Beispiele
Der folgende Intent
fordert eine detaillierte Routenführung zum Taronga Zoo in Sydney an:
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Wenn Sie keine Mautgebühren zahlen oder keine Fähren nutzen möchten, können Sie eine Routenplanung anfordern, bei der versucht wird, dies zu umgehen.
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Wenn Sie lieber etwas Sport treiben möchten, können Sie stattdessen eine Fahrradroute anfordern.
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Wenn Sie lieber ein motorisiertes Motorrad bevorzugen, können Sie beantragen, dass die Route enge Straßen und Wege enthält, die für Autos nicht verfügbar sind. Der folgende intent
gibt eine Route in Indien zurück.
Java
Uri gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
val gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)
Anzeigen eines Street View-Panoramas
Verwenden Sie den Intent google.streetview
, um Google Street View zu starten. Google Street View stellt Panoramaansichten von bestimmten Standorten im gesamten Abdeckungsbereich zur Verfügung.
Außerdem sind von Nutzern bereitgestellte 360°-Fotos und ausgewählte Street View-Sammlungen verfügbar.
google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt
Parameter
Alle google.streetview
-URIs müssen entweder den Parameter cbll
oder panoid
enthalten.
cbll
akzeptiert Breiten- und Längengrade als kommagetrennte Werte (46.414382,10.013988
). Die App zeigt das Panorama an, das am nächsten an diesem Ort fotografiert wurde. Da die Street View-Bilder regelmäßig aktualisiert werden und jedes Mal Fotos aus leicht unterschiedlichen Positionen aufgenommen werden können, ist es möglich, dass Ihr Standort bei der Aktualisierung zu einem anderen Panorama wechselt.panoid
ist eine spezifische Panorama-ID. In Google Maps wird die Panorama-ID verwendet, wennpanoid
undcbll
angegeben sind. Panorama-IDs sind für eine Android-App über dasStreetViewPanoramaLocation
-Objekt verfügbar.cbp
ist ein optionaler Parameter, der die anfängliche Ausrichtung der Kamera anpasst. Der Parametercbp
verwendet fünf kommagetrennte Werte, die alle optional sind. Die wichtigsten Werte sind der zweite, vierte und fünfte Wert, der die Ausrichtung, Zoomstufe und Neigung festlegt. Der erste und dritte Wert werden nicht unterstützt und sollten auf0
festgelegt werden.bearing
: gibt die Kompassausrichtung der Kamera in Grad im Uhrzeigersinn von Norden aus an. Der geografische Norden ist 0, Osten 90, Süden 180 und Westen 270. Werte, die an die Lage übergeben werden, werden umgebrochen, d. h. 0°, 360° und 720° zeigen alle in dieselbe Richtung. Die Lage wird als der zweite von fünf kommagetrennten Werten definiert.zoom
: Legt die Zoomstufe der Kamera fest. Die Standard-Zoomstufe ist 0. Ein Zoom von 1 würde die Vergrößerung verdoppeln. Der Zoom liegt zwischen 0 und der maximalen Zoomstufe für das aktuelle Panorama. Das bedeutet, dass jeder Wert außerhalb dieses Bereichs auf den Extremwert innerhalb des Bereichs gesetzt wird. Ein Wert von -1 wird beispielsweise auf 0 gesetzt. „Zoom“ ist der vierte von fünf kommagetrennten Werten.tilt
: gibt den Winkel (nach oben oder unten) der Kamera an. Der Bereich reicht von -90 über 0 bis 90, wobei 90 gerade nach unten, 0 zentriert am Horizont und -90 gerade nach oben blickt.
Beispiele
Nachfolgend sind einige Beispiele für die Verwendung des Street View-Intents aufgeführt.
Java
// Displays an image of the Swiss Alps Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia Uri gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent); // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. Uri gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri); mapIntent.setPackage("com.google.android.apps.maps"); startActivity(mapIntent);
Kotlin
// Displays an image of the Swiss Alps val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Uses a PanoID to show an image from Maroubra beach in Sydney, Australia val gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent) // Opens Street View between two Pyramids in Giza. The values passed to the // cbp parameter will angle the camera slightly up, and towards the east. val gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15") val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri) mapIntent.setPackage("com.google.android.apps.maps") startActivity(mapIntent)