Aplikacja Mapy Google na Androida udostępnia kilka intencji, których możesz użyć, aby uruchomić Mapy Google w trybie wyświetlania, wyszukiwania, nawigacji lub Street View. Aby umieścić mapę w aplikacji, zapoznaj się z krótkim wprowadzeniem do pakietu Maps SDK na Androida.
W przypadku platform z systemem operacyjnym Android Automotive (AAOS) obowiązują specjalne wymagania i dostępne są dodatkowe intencje. Więcej informacji znajdziesz w dokumentacji intencji Map Google na Androida Automotive.
Omówienie
Intencje umożliwiają rozpoczęcie aktywności w innej aplikacji przez opisanie działania, które chcesz wykonać (np. „wyświetl mapę” lub „pokaż trasę dojazdu na lotnisko”), w obiekcie Intent. Aplikacja Mapy Google na Androida
obsługuje kilka różnych intencji,które umożliwiają uruchomienie aplikacji Mapy Google
i wykonanie jednego z 4 działań:
- Wyświetlanie mapy w określonej lokalizacji i na określonym poziomie powiększenia.
- wyszukiwać lokalizacje i miejsca oraz wyświetlać je na mapie;
- Poproś o wskazówki dojazdu z jednego miejsca do drugiego. Wskazówki dojazdu mogą być zwracane dla 3 rodzajów transportu: samochodu, pieszo i roweru.
- wyświetlać zdjęcia panoramiczne w Google Street View;
Na tej stronie opisaliśmy intencje, których możesz używać w aplikacji Mapy Google na Androida. Więcej informacji o zamiarach znajdziesz w artykułach Zamiary i filtry zamiarów i Typowe zamiary.
Żądania dotyczące intencji
Aby uruchomić Mapy Google za pomocą intencji, 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 View –
ACTION_VIEW. - Identyfikator URI: intencje Map Google używają zakodowanych w formacie URL identyfikatorów URI, które określają wybraną czynność wraz z danymi potrzebnymi do jej wykonania.
Pakiet: wywołanie
setPackage("com.google.android.apps.maps")zapewnia, że aplikacja Mapy Google na Androida obsłuży Intent. Jeśli pakiet nie jest ustawiony, system określa, które aplikacje mogą obsługiwaćIntent. Jeśli dostępnych jest kilka aplikacji, użytkownik może zostać poproszony o wybranie aplikacji, której chce użyć.
Po utworzeniu Intent możesz poprosić system o uruchomienie powiązanej aplikacji na kilka sposobów. Często stosowaną metodą jest przekazywanie wartości Intent do metody startActivity(). System uruchomi odpowiednią aplikację, w tym przypadku Mapy Google, i rozpocznie odpowiednią 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 może zidentyfikować aplikacji, która może odpowiedzieć na intencję, Twoja aplikacja może ulec awarii. Z tego powodu przed wyświetleniem użytkownikowi jednego z tych zamiarów najpierw sprawdź, czy aplikacja odbierająca jest zainstalowana.
Aby sprawdzić, czy aplikacja może odbierać intencję, wywołaj metodę resolveActivity() na obiekcie Intent. Jeśli wynik jest niepusty, oznacza to, że jest co najmniej 1 aplikacja, która może obsłużyć intencję, i można bezpiecznie wywołać funkcję startActivity(). Jeśli wynikiem jest null, nie używaj intencji i w miarę możliwości 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 zapytań zakodowane w formacie adresu URL
Wszystkie ciągi tekstowe przekazywane do intencji Map Google muszą być zakodowane w formacie URI. Na przykład ciąg znaków 1st & Pike, Seattle powinien zostać przekształcony w 1st%20%26%20Pike%2C%20Seattle.
Spacje w ciągu znaków można zakodować za pomocą znaku %20 lub zastąpić znakiem plusa (+).
Do kodowania ciągów znaków możesz użyć metody android.net.Uri encode().
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
Użyj intencji geo:, aby wyświetlić mapę w określonej lokalizacji i z określonym poziomem powiększenia.
geo:latitude,longitude?z=zoom
Parametry
latitudeilongitudeustawiają punkt środkowy mapy.zopcjonalnie ustawia początkowy poziom powiększenia mapy. Akceptowane wartości mieszczą się w zakresie od 0 (cały świat) do 21 (poszczególne 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 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żyj tego zamiaru, aby wyświetlić zapytania w określonym obszarze wyświetlania. Jeśli zapytanie zwraca tylko 1 wynik, możesz użyć tego zamiaru, aby wyświetlić pinezkę w określonym miejscu lub pod określonym adresem, np. w pobliżu punktu orientacyjnego, firmy, obiektu geograficznego lub miasta.
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 parametry:
qokreśla miejsca, które mają być wyróżnione na mapie. Parametrqjest wymagany w przypadku wszystkich żądań wyszukiwania. Akceptuje lokalizację jako nazwę miejsca lub adres. Ciąg znaków powinien być zakodowany, więc adres taki jakCity Hall, New York, NYnależy przekształcić wCity+Hall,New+York,NY.labelumożliwia ustawienie etykiety własnej w miejscu wskazanym na mapie.labelmusi być określony jako ciąg znaków.
Wyszukiwanie według kategorii
Jeśli przekażesz ogólne wyszukiwane hasło, Mapy Google spróbują znaleźć lokalizację w pobliżu podanych przez Ciebie współrzędnych geograficznych, która spełnia Twoje kryteria. Jeśli nie podasz lokalizacji, Mapy Google spróbują znaleźć informacje o firmach w pobliżu. 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 wpłynąć na wyniki wyszukiwania, podając parametr powiększenia wraz z ciągiem zapytania. W poniższym przykładzie dodanie powiększenia 10 powoduje próbę znalezienia restauracji na poziomie miasta zamiast 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 powoduje wyświetlenie pinezki 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)
W powyższym przykładzie ustawiono szerokość i długość geograficzną na 0,0, ale adres jest przekazywany jako ciąg zapytania. Podczas wyszukiwania konkretnej lokalizacji nie musisz podawać szerokości i długości geograficznej. 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 „Main Street” 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 intencji powoduje, że wyniki są bardziej ukierunkowane na określony 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ć podane jako ciąg znaków i wyświetlać się pod znacznikiem na mapie. Pamiętaj, że etykiety są dostępne tylko wtedy, gdy jako współrzędne szerokości i długości geograficznej podano q.
Java
// Display a label at the location of Google's Sydney office.
Uri gmmIntentUri = Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)");
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, używając 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.
Uruchom nawigację zakręt po zakręcie
Użyj tego identyfikatora URI intencji, aby uruchomić nawigację w Mapach Google ze szczegółowymi wskazówkami dojazdu do podanego adresu lub współrzędnych. Wskazówki dojazdu są zawsze podawane na podstawie bieżącej lokalizacji użytkownika.
google.navigation:q=a+street+address
google.navigation:q=latitude,longitude
Parametry
q: ustawia punkt końcowy wyszukiwań nawigacyjnych. Może to być szerokość i długość geograficzna lub adres w formacie zapytania. Jeśli jest to ciąg zapytania, który zwraca więcej niż 1 wynik, wybierany jest pierwszy wynik.modeokreśla środek transportu.modejest opcjonalny i może mieć jedną z tych wartości:dsamochodem (domyślnie)bna rowerzelmotocyklemwpieszo
avoidokreśla elementy, których trasa powinna unikać.avoidjest opcjonalne i może mieć jedną z tych wartości:tza opłatyhautostradfpromów
Przykłady
Poniższe żądania Intent powodują włączenie nawigacji krok po kroku do zoo Taronga 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 autostradą lub promem, 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ę poćwiczyć, 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 jechać dwukołowym pojazdem silnikowym, możesz poprosić o wyznaczenie trasy z uwzględnieniem wąskich dróg i ścieżek niedostępnych dla samochodów. Poniższy kod
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 udostępnia panoramiczne widoki z wyznaczonych lokalizacji 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:
cbllprzyjmuje szerokość i długość geograficzną jako wartości rozdzielone przecinkami (46.414382,10.013988). Aplikacja wyświetla panoramę sfotografowaną najbliżej tej lokalizacji. Zdjęcia Street View są okresowo odświeżane, a fotografie mogą być za każdym razem wykonywane z nieco innych pozycji. Dlatego po aktualizacji zdjęć Twoja lokalizacja może zostać przeniesiona do innej panoramy.panoidto konkretny identyfikator panoramy. Mapy Google używają identyfikatora panoramy, jeśli określono zarównopanoid, jak icbll. Identyfikatory panoram są dostępne dla aplikacji na Androida w obiekcieStreetViewPanoramaLocation.cbpto opcjonalny parametr, który dostosowuje początkową orientację kamery. Parametrcbpprzyjmuje 5 wartości rozdzielonych przecinkami, z których wszystkie są opcjonalne. Najważniejsze wartości to druga, czwarta i piąta, które określają odpowiednio kierunek, powiększenie i pochylenie. Pierwsza i trzecia wartość nie są obsługiwane i powinny być ustawione na0.bearing: wskazuje kierunek, w którym zwrócona jest kamera, w stopniach zgodnie z ruchem wskazówek zegara od północy. Północ to 0, wschód to 90, południe to 180, a zachód to- Wartości przekazywane do parametru bearing są zawijane, tzn. 0°, 360° i 720° wskazują ten sam kierunek. Kierunek to druga z 5 wartości rozdzielonych przecinkami.
zoom: ustawia poziom powiększenia kamery. Domyślny poziom powiększenia to 0. Powiększenie o wartości 1 spowoduje dwukrotne powiększenie. Powiększenie jest ograniczone do zakresu od 0 do maksymalnego poziomu powiększenia dla bieżącej panoramy. Oznacza to, że każda wartość spoza tego zakresu jest ustawiana na najbliższą wartość skrajną, która mieści się w 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 nachylenia kamery w górę lub w dół. Zakres wynosi od -90 do 90, przy czym 90 oznacza widok prosto w dół, 0 oznacza widok wyśrodkowany na horyzoncie, a -90 oznacza widok prosto w górę.
Przykłady
Oto 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 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)