Aplikacja Mapy Google na Androida zawiera kilka funkcji, które można wykorzystać do uruchamiania Map Google w trybach wyświetlania, wyszukiwania, nawigacji lub Street View. Jeśli chcesz umieścić mapę w aplikacji, zapoznaj się z wprowadzeniem do interfejsu Google Maps Android API.
Przegląd
Intencje umożliwiają rozpoczęcie działania w innej aplikacji. Opisują one proste działanie, które chcesz wykonać w obiekcie Intent
(np. „wyświetl mapę” lub „wskazówki dojazdu do lotniska”). Aplikacja Mapy Google na Androida obsługuje kilka różnych intencji, dzięki czemu możesz uruchomić aplikację Mapy Google i wykonać jedną z czterech czynności:
- Wyświetlaj mapę w określonej lokalizacji i powiększeniu.
- Wyszukuj lokalizacje lub miejsca i wyświetlaj je na mapie.
- Zapytanie o wskazówki dojazdu z jednego miejsca do drugiego. Wskazówki dojazdu można zwracać w przypadku 3 środków transportu: samochodem, pieszo, rowerem.
- Wyświetlaj zdjęcia panoramiczne w Google Street View.
Na tej stronie opisujemy intencje, których możesz używać z aplikacją Mapy Google na Androida. Więcej informacji o intencjach i filtrach intencji oraz o intencjach typowych dla platformy Androida znajdziesz w dokumentacji dla deweloperów aplikacji na Androida.
Żądania dotyczące intencji
Aby uruchomić Mapy Google z intencją, musisz najpierw utworzyć obiekt Intent
, podając jego działanie, identyfikator URI i pakiet.
- Działanie: wszystkie intencje w Mapach Google są nazywane akcją wyświetlenia –
ACTION_VIEW
. - Identyfikator URI: intencje Map Google korzystają z zakodowanych adresów URL, które określają żądane działanie (wraz z danymi używanymi do jego wykonania).
- Pakiet: wywołanie metody
setPackage("com.google.android.apps.maps")
sprawi, że aplikacja Mapy Google na Androida obsługuje intencję. Jeśli pakiet nie jest skonfigurowany, system określi, które aplikacje mogą obsłużyćIntent
. Jeśli dostępnych jest wiele aplikacji, użytkownik może zostać zapytany, której aplikacji chce użyć.
Po utworzeniu pliku Intent
możesz na kilka sposobów poprosić system o uruchomienie powiązanej aplikacji. Typową metodą jest przekazywanie parametru Intent
do metody startActivity()
. System uruchomi niezbędną aplikację – w tym przypadku Mapy Google – i uruchomi odpowiednią aplikację 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ę, może ona ulec awarii. Z tego względu przed zaprezentowaniem użytkownikowi jednej z tych intencji należy sprawdzić, czy jest zainstalowana aplikacja odbierająca.
Aby sprawdzić, czy aplikacja może odebrać intencję, wywołaj resolveActivity()
w obiekcie Intent
. Jeśli wynik nie ma wartości null, istnieje co najmniej 1 aplikacja, która może obsłużyć intencję i można ją bezpiecznie wywołać startActivity()
.
Jeśli wynikiem jest null
, nie używaj intencji i, jeśli to możliwe, wyłącz funkcję wywołującą intencję.
Java
if (mapIntent.resolveActivity(getPackageManager()) != null) { ... }
Kotlin
mapIntent.resolveActivity(packageManager)?.let { ... }
Aby na przykład wyświetlić mapę Krakowa, możesz użyć następującego 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 zapytania zakodowane w adresie URL
Wszystkie ciągi znaków przekazywane do intencji Map Google muszą być zakodowane za pomocą identyfikatora URI. Na przykład ciąg „1st & Pike, Seattle” powinien zmienić się na 1st%20%26%20Pike%2C%20Seattle
.
Spacje w ciągu znaków można zakodować za pomocą %20 lub zastąpić znakiem plusa (+).
Do kodowania ciągów znaków możesz użyć metody android.net.Uri
parse()
.
Na 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,
Aby wyświetlić mapę w określonej lokalizacji i w określonym poziomie powiększenia, użyj intencji geo:
.
geo:latitude,longitude?z=zoom
Parametry
- Opcje
latitude
ilongitude
wskazują środek mapy. z
opcjonalnie ustawia początkowy poziom powiększenia mapy. Akceptowane wartości to od 0 (cały świat) do 21 (pojedyncze budynki). Górny limit może się różnić w zależności od danych mapy dostępnych w wybranej lokalizacji.
Przykłady
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)
Wyszukiwanie lokalizacji
Ta intencja pozwala wyświetlać wyszukiwane hasła w określonym widocznym obszarze. Jeśli zapytanie zwraca jeden wynik, możesz użyć tej intencji, aby wyświetlić pinezkę w określonym miejscu lub adresie, takim jak punkt orientacyjny, firma, obiekt geograficzny lub miasto.
geo:latitude,longitude?q=query geo:0,0?q=my+street+address geo:0,0?q=latitude,longitude(label)
Parametry
Oprócz parametrów używanych do wyświetlania mapy wyszukiwarka obsługuje też te parametry:
q
określa miejsca do zaznaczenia na mapie. Parametrq
jest wymagany w przypadku wszystkich żądań wyszukiwania. Akceptuje ono lokalizację jako nazwę lub adres. Ciąg powinien być zakodowany za pomocą adresu URL, więc adres taki jak „City Hall, New York, NY” powinien zostać przekonwertowany na City+Hall,New+York,NY.label
umożliwia ustawienie etykiety własnej w miejscu wskazanym na mapie. Elementlabel
musi być określony jako String.
Wyszukiwanie kategorialne
Jeśli prześlesz ogólne wyszukiwane hasło, Mapy Google spróbują znaleźć lokalizację w pobliżu podanej szerokości i długości geograficznej, która spełnia Twoje kryteria. Jeśli nie podasz lokalizacji, Mapy Google spróbują znaleźć informacje o pobliskich lokalizacjach. Na 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)
Możesz dodatkowo odchylić wyniki wyszukiwania, określając parametr powiększenia wraz z ciągiem zapytania. W poniższym przykładzie dodanie powiększenia o 10 spowoduje znalezienie 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
Wyszukanie konkretnego adresu spowoduje wyświetlenie w tej lokalizacji pinezki.
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)
Powyższy przykład ustawia szerokość i długość geograficzną 0
,0
, ale przekazuje adres jako ciąg zapytania. Przy wyszukiwaniu konkretnej lokalizacji nie trzeba podawać szerokości i długości geograficznej. Jeśli jednak nie znasz dokładnego adresu, możesz spróbować zniekształcić wyniki wyszukiwania, podając współrzędną. Na przykład wyszukanie adresu „ulica Główna” zwróci zbyt wiele wyników.
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")
Dodanie szerokości i długości geograficznej do identyfikatora URI intencji powoduje zwrócenie wyników w kierunku konkretnego obszaru:
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 zwróci 1 wartość, możesz przekazać opcjonalną etykietę. Etykiety muszą być określone w postaci ciągu znaków i będą widoczne pod znacznikiem mapy. Pamiętaj, że etykiety są dostępne tylko wtedy, gdy jako współrzędna szerokości i długości geograficznej określono q
.
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 lub szerokości i długości geograficznej możesz wyświetlić pinezkę w znanej lokalizacji, korzystając z 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 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
Uruchamiam nawigację zakręt po zakręcie
Użyj tej intencji, aby uruchomić nawigację w Mapach Google ze szczegółowymi wskazówkami pod kątem podanego adresu lub współrzędnych. Wskazówki dojazdu są zawsze podawane z bieżącej lokalizacji użytkownika.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
Parametry
q
: ustawia punkt końcowy wyszukiwania nawigacji. Tą wartością może być szerokość i długość geograficzna lub adres sformatowany w zapytaniu. Jeśli jest to ciąg zapytania, który zwraca więcej niż 1 wynik, wybrany zostanie pierwszy wynik.mode
określa środek transportu. Tryb jest opcjonalny i możesz go ustawić na:d
do jazdy samochodem (domyślnie)b
do jazdy rowereml
dla motocyklaw
na spacery
avoid
określa obiekty, których trasa ma unikać. Nie jest to wymagane. Można go ustawić na jedną z tych wartości:t
– opłaty za przejazdh
w przypadku autostradf
za promy
Przykłady
Poniższy Intent
prosi o szczegółową nawigację do zoo Taronga 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 przejazdy ani korzystać z promów, możesz poprosić o wyznaczenie trasy, aby uniknąć tych opłat.
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 poćwiczyć, możesz poprosić o trasę rowerową.
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 pojechać motocyklem z silnikiem, możesz poprosić o uwzględnienie wąskich dróg i szlaków niedostępnych dla samochodów. Poniżej 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
Użyj intencji google.streetview
, aby uruchomić Google Street View. Google Street View zapewnia panoramiczne widoki z wyznaczonych lokalizacji na całym obszarze.
Dostępne są również zdjęcia sferyczne przesłane przez użytkowników i kolekcje specjalne 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
akceptuje szerokość i długość geograficzną jako wartości rozdzielone przecinkami (46.414382,10.013988
). Aplikacja wyświetli panoramę sfotografowaną najbliżej tej lokalizacji. Zdjęcia Street View są okresowo odświeżane, a zdjęcia mogą być wykonywane za każdym razem w nieco innej pozycji. Dlatego po aktualizacji zdjęć Twoja lokalizacja może się zmienić w widok panoramiczny.panoid
to specjalny identyfikator panoramy. Mapy Google będą korzystać z identyfikatora panoramy, jeśli podasz zarównopanoid
, jak icbll
. Identyfikatory panoram 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. Najbardziej istotne wartości to druga, czwarta i piąta wartość, która ustawia odpowiednio położenie, powiększenie i przechylenie. Pierwsza i trzecia wartość nie są obsługiwane i powinny być ustawione na0
.bearing
: wskazuje kierunek obrotu na kompasie w stopniach w prawo, od kierunku północnego. Faktyczna północ to 0, wschód to 90, południe 180, zachód – 270. Wartości przekazane do ośmiania będą zawijane, czyli 0°, 360° i 720° – wszystkie muszą być w tym samym kierunku. Orientacja jest definiowana jako druga z 5 wartości rozdzielonych przecinkami.zoom
: ustawia poziom powiększenia w kamerze. Domyślny poziom powiększenia to 0. Powiększenie o wartości 1 powoduje podwojenie powiększenia. Powiększenie jest ograniczane od 0 do maksymalnego poziomu powiększenia bieżącej panoramy. Oznacza to, że każda wartość spoza tego zakresu zostanie ustawiona na najbliższą wartość skrajną w tym zakresie. Na przykład wartość -1 zostanie ustawiona na 0. Powiększenie to czwarta z pięciu wartości rozdzielonych przecinkami.tilt
: określa kąt obrotu kamery w górę lub w dół. Zakres wynosi od -90 do 0–90, gdzie 90 patrzysz prosto w dół, 0 wyśrodku się na horyzoncie, a -90 – prosto w górę.
Przykłady
Poniżej znajdziesz kilka przykładów użycia intencji 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 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)