Aplikacja Mapy Google na Androida udostępnia kilka intencji, których możesz użyć do uruchamiania Map Google w trybie wyświetlania, wyszukiwania, nawigacji lub Street View. Aby umieścić mapę w aplikacji, zapoznaj się z krótkim wprowadzeniem do Maps SDK na Androida.
W przypadku platform z systemem operacyjnym Android Automotive (AAOS) należy wziąć pod uwagę kilka kwestii i dostępnych jest kilka dodatkowych intencji. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją dotyczącą intencji Map Google na Androida Automotive.
Omówienie
Intencje umożliwiają rozpoczęcie aktywności w innej aplikacji poprzez opisanie działania, które chcesz wykonać (np. „wyświetlanie mapy” lub „wyświetlanie wskazówek dojazdu do lotniska”) w obiekcie Intent
. Aplikacja Mapy Google na Androida obsługuje kilka różnych intencji,dzięki czemu możesz uruchomić aplikację Mapy Google i wykonać jedno z 4 działań:
- Wyświetlanie mapy w określonej lokalizacji i poziomie powiększenia.
- wyszukiwać lokalizacje i miejsca oraz wyświetlać je na mapie;
- Wyznacz trasę z jednego miejsca do drugiego. Wskazówki mogą być zwracane dla 3 rodzajów transportu: samochodem, pieszo lub rowerem.
- wyświetlać panoramy w Google Street View.
Ta strona opisuje intencje, których możesz używać w aplikacji Mapy Google na Androida. Więcej informacji o zamiarach znajdziesz w artykułach Zamierzenia i filtry zamierzeń oraz Częste zamierzenia.
Żądania dotyczące intencji
Aby uruchomić Mapy Google z zamierzeniem, musisz najpierw utworzyć obiekt Intent
, określając jego działanie, identyfikator URI i pakiet.
- Działanie: wszystkie intencje Map Google są wywoływane jako działanie wyświetlania —
ACTION_VIEW
. - Identyfikator URI: intencje Map Google używają identyfikatorów URI z kodowaniem URL, które określają wybrane działanie wraz z niektórymi danymi potrzebnymi do jego wykonania.
Pakiet: wywołanie
setPackage("com.google.android.apps.maps")
zapewnia, że aplikacja Mapy Google na Androida obsłuży intencję. Jeśli pakiet nie jest ustawiony, system decyduje, które aplikacje mogą obsługiwaćIntent
. Jeśli dostępnych jest kilka aplikacji, użytkownik może zostać poproszony o wybranie tej, której chce użyć.
Po utworzeniu Intent
możesz poprosić system o uruchomienie powiązanej aplikacji na kilka sposobów. Typową metodą jest przekazanie wartości Intent
metodzie startActivity()
. System uruchamia niezbędną aplikację (w tym przypadku Mapy Google) i odpowiednią funkcję 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)
Jeśli system nie będzie w stanie zidentyfikować aplikacji, która może odpowiedzieć na intencję, aplikacja może się zawiesić. Dlatego zanim przedstawisz użytkownikowi jeden z tych intencji, najpierw sprawdź, czy aplikacja odbiorcza jest zainstalowana.
Aby sprawdzić, czy aplikacja może odebrać intencję, wywołaj funkcję resolveActivity()
w obiekcie Intent
. Jeśli wynik jest niezerowany, istnieje co najmniej 1 aplikacja, która może obsłużyć intencję, i można bezpiecznie wywołać funkcję startActivity()
. Jeśli wynik to null
, nie używaj intencji, a jeśli to możliwe, wyłącz funkcję, która ją wywołuje.
Java
if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}
Kotlin
mapIntent.resolveActivity(packageManager)?.let {
...
}
Aby na przykład wyświetlić mapę San Francisco, możesz użyć tego kodu:
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)
}
ciągi tekstowe zapytań zakodowane w formacie adresu URL;
Wszystkie ciągi przekazywane do Map Google Intents muszą być zakodowane w formacie URI. Na przykład ciąg znaków 1st & Pike, Seattle
powinien stać się 1st%20%26%20Pike%2C%20Seattle
.
Spacje w ciągu mogą być kodowane za pomocą znaku %20
lub zastępowane znakiem plusa (+
).
Do kodowania ciągów znaków możesz użyć metody android.net.Uri
parse()
.
Przykład:
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"))
Wyświetlanie mapy
Użyj intencji geo:
, aby wyświetlić mapę w określonej lokalizacji i poziomie powiększenia.
geo:latitude,longitude?z=zoom
Parametry
latitude
ilongitude
ustawiają punkt środkowy mapy.z
opcjonalnie ustawia początkowy poziom powiększenia mapy. Akceptowane wartości wahają się od 0 (cały świat) do 21 (poszczególne budynki). Górna granica może się różnić w zależności od danych mapy dostępnych w wybranej lokalizacji.
Przykłady
Java
// Creates an Intent that loads 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 loads 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)
Szukaj lokalizacji
Używaj tego zamiaru, aby wyświetlać zapytania w określonym widoku. Gdy zapytanie ma jeden wynik, możesz użyć tego zamiaru, aby wyświetlić pin w określonym miejscu lub pod określonym adresem, np. w miejscu charakterystycznym, firmie, obiekcie geograficznym lub mieście.
geo:latitude,longitude?q=query
geo:0,0?q=my+street+address
geo:0,0?q=latitude,longitude(label)
Parametry
Oprócz parametrów służących do wyświetlania mapy wyszukiwarka obsługuje też te parametry:
q
określa miejsca, które mają być wyróżnione na mapie. Parametrq
jest wymagany we wszystkich żądaniach wyszukiwania. Może to być nazwa lub adres miejsca. Ciąg tekstowy powinien być zakodowany w formacie URL, więc adres taki jakCity Hall, New York, NY
powinien zostać przekonwertowany naCity+Hall,New+York,NY
.label
umożliwia ustawienie etykiety własnej w miejscu wskazanym na mapie. Wartośćlabel
musi być podana jako ciąg znaków.
Wyszukiwanie według kategorii
Jeśli podasz ogólne hasło wyszukiwania, Mapy Google spróbują znaleźć lokalizację zbliżoną do podanych współrzędnych geograficznych, która odpowiada Twoim kryteriam. Jeśli nie określisz lokalizacji, Mapy Google spróbują znaleźć informacje o miejscach w pobliżu. Przykład:
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)

Wyniki wyszukiwania możesz jeszcze bardziej dostosować, podając parametr zoomu wraz z ciągiem zapytania. W tym przykładzie powiększenie 10 razy powoduje próbę znalezienia restauracji na poziomie miasta, a nie w pobliżu.
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)
wyszukiwanie lokalizacji;
Wyszukiwanie konkretnego adresu powoduje wyświetlenie pinezy w tej lokalizacji.
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)
Poprzedni przykład ustawia współrzędne szerokości i długości geograficznej 0
,0
, ale przekazuje adres jako ciąg znaków zapytania. W przypadku wyszukiwania konkretnej lokalizacji współrzędne geograficzne nie są wymagane. Jeśli jednak nie znasz dokładnego adresu, możesz spróbować wpłynąć na wyniki wyszukiwania, podając współrzędne. Na przykład wyszukiwanie adresu „Ulica Główna” może zwrócić zbyt wiele wyników.
Java
// Searching for 'Main Street' returns too many results.
Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");
Kotlin
// Searching for 'Main Street' returns too many results.
val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")
Dodanie szerokości i długości geograficznej do identyfikatora URI zamiaru powoduje, że wyniki są ukierunkowane na konkretny obszar:
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)
Jeśli wiesz, że wyszukiwanie zwraca jedną wartość, możesz przekazać opcjonalną etykietę. Etykiety muszą być określone jako ciągi znaków i wyświetlane pod znacznikiem mapy. Pamiętaj, że etykiety są dostępne tylko wtedy, gdy q
jest określony jako współrzędna szerokości i długości geograficznej.
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)
Zamiast adresu ulicznego lub współrzędnych geograficznych możesz wyświetlić pin w znanej lokalizacji za pomocą kodu plus.
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 preceding examples.
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 preceding examples.
Uruchomienie nawigacji zakręt po zakręcie
Użyj tego identyfikatora URI intencji, aby uruchomić nawigację w Mapach Google z szczegółowymi wskazówkami dojazdu do podanego adresu lub współrzędnych. Trasy są zawsze obliczane na podstawie bieżącej lokalizacji użytkownika.
google.navigation:q=a+street+address
google.navigation:q=latitude,longitude
Parametry
q
: ustawia punkt końcowy dla wyszukiwania nawigacji. Wartością może być współrzędna szerokości i długości geograficznej lub adres w formacie zapytania. Jeśli jest to ciąg znaków zapytania, który zwraca więcej niż 1 wynik, wybrany zostanie pierwszy wynik.mode
określa sposób transportu.mode
jest opcjonalny i może być ustawiony na jedną z tych wartości:d
samochodem (domyślnie)b
na rowerzel
motocyklemw
na spacery
avoid
określa cechy, których trasa powinna unikać.avoid
jest opcjonalny i może mieć jedną z tych wartości:t
za opłaty drogoweh
na autostradachf
promów
Przykłady
Użytkownik Intent
prosi o nawigację krok po kroku do Taronga Zoo w Sydney w Australii:
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)

Jeśli nie chcesz płacić za przejazd przez bramki lub nie chcesz korzystać z promu, możesz poprosić o wyznaczenie trasy, która będzie ich unikać.
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)
Jeśli wolisz trochę się poruszać, możesz poprosić o wskazówki dojazdu rowerem.
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)
Jeśli wolisz korzystać z dwukołowców z silnikiem, możesz poprosić o to, aby wskazówki obejmowały wąskie drogi i ścieżki niedostępne dla samochodów. Poniższe zapytanie intent
zwraca trasę w Indiach.
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)
Wyświetlanie panoramy Street View
Aby uruchomić Google Street View, użyj intencji google.streetview
. Google Street View udostępnia widoki panoramiczne z wybranych miejsc w obszarze objętym zasięgiem. Dostępne są też zdjęcia sferyczne przesłane przez użytkowników i specjalne kolekcje Street View.
google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt
google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt
Parametry
Wszystkie identyfikatory URI google.streetview
muszą zawierać parametr cbll
lub panoid
:
cbll
może zawierać szerokość i długość geograficzną w postaci wartości rozdzielanych przecinkami (46.414382,10.013988
). Aplikacja wyświetla panoramę, która została zrobiona najbliżej tej lokalizacji. Zdjęcia w Street View są okresowo odświeżane, a zdjęcia mogą być robione z nieco innych pozycji, dlatego po aktualizacji zdjęć Twoja lokalizacja może się zmienić na inną panoramę.panoid
to identyfikator konkretnej panoramy. Jeśli podasz zarównopanoid
, jak icbll
, Mapy Google użyją identyfikatora panoramy. Identyfikatory panoramy są dostępne dla aplikacji na Androida z obiektuStreetViewPanoramaLocation
.cbp
to opcjonalny parametr, który dostosowuje początkową orientację kamery. Parametrcbp
może mieć 5 wartości rozdzielonych przecinkami, z których wszystkie są opcjonalne. Najważniejsze wartości to 2, 4 i 5, które określają odpowiednio kierunek, powiększenie i przechylenie. Pierwsza i trzecia wartość nie są obsługiwane i powinny być ustawione na0
.bearing
: określa kierunek na kompasie, w którym zwrócona jest kamera, w stopniach zgodnie z kierunkiem ruchu wskazówek zegara, licząc od północy. Prawdziwa północ to 0, wschód to 90, południe to 180, a zachód to 360.- Wartości przekazywane do okładek łożysk, czyli 0°, 360° i 720°, wskazują w tym samym kierunku. Kierunek jest zdefiniowany jako druga z 5 wartości rozdzielonych przecinkami.
zoom
: określa poziom powiększenia kamery. Domyślny poziom powiększenia to 0. Powiększenie 1 podwaja powiększenie. Powiększenie jest ograniczone do zakresu od 0 do maksymalnego powiększenia bieżącej panoramy. Oznacza to, że każda wartość wykraczająca poza ten zakres jest ustawiana na najbliższą wartość skrajną, która mieści się w tym zakresie. Na przykład wartość -1 jest ustawiana na 0. Powiększenie to czwarta z 5 wartości rozdzielonych przecinkami.tilt
: określa kąt, w którym skierowana jest kamera (w górę lub w dół). Zakres wynosi od -90 do 0 i 90, przy czym 90 oznacza widok w dół, 0 – widok na horyzont, a -90 – widok w górę.
Przykłady
Poniżej znajdziesz kilka przykładów użycia intencji związanej ze Street View.
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 angles 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 angles 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)
