Aplikacja Mapy Google na Androida ujawnia kilka intencji, które można wykorzystać do uruchomienia Map Google w widoku w trybach wyszukiwania, nawigacji lub Street View. Jeśli chcesz umieścić mapę w swojej aplikacji, zapoznaj się z interfejsem API Map Google na Androida Przewodnik dla początkujących
Omówienie
Intencje umożliwiają rozpoczęcie aktywności w innej aplikacji przez opisanie prostego działania
którą chcesz wykonać (np. „wyświetl mapę” lub „pokaż trasę do
lotniska”) w
Intent
obiektu.
Aplikacja Mapy Google na Androida
obsługuje kilka różnych intencji, co pozwala na uruchomienie aplikacji Mapy Google
i wykonaj jedną z czterech czynności:
- Możesz wyświetlić mapę w określonej lokalizacji i na poziomie powiększenia.
- Wyszukaj lokalizacje lub miejsca i wyświetl je na mapie.
- Uzyskiwanie wskazówek dojazdu z jednego miejsca do drugiego. Wskazówki dojazdu można zwrócić dla trzech środków transportu: samochodu, pieszego, rowerowego.
- Wyświetl zdjęcia panoramiczne w Google Street View.
Na tej stronie opisaliśmy intencje, których można używać w aplikacji Mapy Google do: na urządzeniu z Androidem. Aby dowiedzieć się więcej na temat intencji i zamiarów, Filtry lub intencje wspólne dla Androida , zapoznaj się z dokumentacją dla deweloperów aplikacji na Androida.
Żądania intencji
Aby uruchomić Mapy Google z zamiarem, musisz najpierw utworzyć
Intent
określając jego działanie, identyfikator URI i pakiet.
- Działanie: wszystkie intencje w Mapach Google są nazywane działaniem wyświetlenia.
ACTION_VIEW
- Identyfikator URI: intencje Map Google używają zakodowanego adresu URL, który określa działanie oraz dane, które posłużą do jego wykonania.
- Pakiet: połączenie z:
setPackage("com.google.android.apps.maps")
spowoduje Sprawdź, czy aplikacja Mapy Google na Androida obsługuje intencję. Jeśli nie zostanie ustawiony, system określi, które aplikacje obsługująIntent
Jeśli dostępnych jest wiele aplikacji, użytkownik może zostać zapytany, którą z nich których chcieliby używać.
Po utworzeniu Intent
możesz poprosić system o uruchomienie powiązanych
aplikacji na wiele sposobów. Popularną metodą jest przekazanie Intent
funkcji
startActivity()
.
. System uruchomi niezbędną aplikację – w tym przypadku Google
i rozpocznij
odpowiadający parametr 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 jest w stanie zidentyfikować aplikacji, która może zareagować na intencję, może ulec awarii. Z tego powodu należy najpierw sprawdzić, czy odbieranie jest instalowana przed przekazaniem użytkownikowi jednego z tych intencji.
Aby sprawdzić, czy aplikacja może odbierać intencje, wywołaj
resolveActivity()
na
Intent
obiektu. Jeśli wynik nie ma wartości null, istnieje co najmniej jedna aplikacja, która może obsłużyć
możesz bezpiecznie zadzwonić
startActivity()
Jeśli wynik to null
, nie należy używać intencji, a jeśli to możliwe,
należy wyłączyć funkcję, która wywołuje intencję.
Java
if (mapIntent.resolveActivity(getPackageManager()) != null) { ... }
Kotlin
mapIntent.resolveActivity(packageManager)?.let { ... }
Aby na przykład wyświetlić mapę San Francisco, 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. Przykład:
ciąg „1st & Pike, Seattle” powinna wynosić 1st%20%26%20Pike%2C%20Seattle
.
Spacje w ciągu można zakodować za pomocą %20 lub zastąpić znakiem plusa (+).
Do zakodowania ciągów tekstowych 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
Użyj intencji geo:
, aby wyświetlić mapę w określonej lokalizacji i na poziomie powiększenia.
geo:latitude,longitude?z=zoom
Parametry
latitude
ilongitude
ustawiają punkt środkowy mapy.z
opcjonalnie ustawia początkowy poziom powiększenia mapy. Zakres akceptowanych wartości od 0 (cały świat) do 21 (pojedyncze budynki). Górna granica może różnią się 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
Użyj tej intencji, aby wyświetlać wyszukiwane hasła w określonym widocznym obszarze. Gdy zapytanie zwraca pojedynczy wynik, możesz użyć tej intencji, aby wyświetlić pinezkę w miejscu dane miejsce lub adres, takie jak punkt orientacyjny, firma, obiekt geograficzny, 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 następujące parametry:
q
określa miejsca do wyróżnienia na mapie. Parametrq
ma postać wymagane dla wszystkich żądań wyszukiwania. Akceptuje lokalizację jako miejsce imię i nazwisko lub adres. Ciąg powinien być zakodowany w adresie URL. np. „City Hall, New York, NY” należy przekonwertować na City+Hall,Nowy+Jork,Nowy Jork.label
umożliwia ustawienie własnej etykiety w miejscu wskazanym na mapie. Polelabel
musi być określone jako ciąg znaków.
Wyszukiwanie kategorialne
Jeśli przekażesz ogólne wyszukiwane hasło, aplikacja Mapy Google spróbuje znaleźć lokalizację. w pobliżu podanej szerokości/długości geograficznej, która odpowiada określonym kryteriom. Jeśli nie ma lokalizacji zostanie określony, spróbuje znaleźć pobliskie wizytówki w Mapach Google. 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 jeszcze bardziej zniekształcać wyniki wyszukiwania, określając parametr zoom z ciągiem zapytania. W przykładzie poniżej dodanie powiększenia na poziomie 10 spowoduje próbę aby znaleźć restauracje 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 pinezki w tym miejscu.
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 podanym przykładzie można ustawić szerokość/długość geograficzną 0
,0
, ale adres przekazuje adres jako zapytanie
ciągu znaków. Przy wyszukiwaniu bardzo określonej lokalizacji można wyświetlić szerokość i długość geograficzną
nie są wymagane. Jeśli nie znasz dokładnego adresu, możesz
próbują zniekształcać wyniki wyszukiwania przez określenie współrzędnych. Dla:
Można na przykład wyszukać hasło „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 zachęcenie wyników do 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 zwróci jedną wartość, możesz przekazać parametr
etykieta opcjonalna. Etykiety muszą być określone jako ciąg znaków. Będą się one pojawiać w tagu
znacznik mapy. Pamiętaj, że etykiety są dostępne tylko wtedy, gdy parametr q
jest określony jako
współrzędna szerokości/długości.
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 możesz wyświetlić pinezkę w znanej lokalizacji przy użyciu Kod 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 do podanego adresu lub współrzędnych. Wskazówki są zawsze przekazywane 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. Wartość może być szerokości i długości geograficznej albo adresu w formacie zapytania. Jeśli jest to zapytanie który zwraca więcej niż jeden wynik, pierwszym wynikiem będzie zaznaczono.mode
ustawia środek transportu. Tryb jest opcjonalny i można go ustawić na jedna z tych opcji:d
do jazdy samochodem (domyślnie)b
dla rowerówl
dla motocyklaw
do trasy pieszej
avoid
określa miejsca, których trasa powinna unikać. Unikanie jest opcjonalne i można ustawić na jedną lub większą liczbę z tych opcji:t
za opłatyh
przy autostradachf
za promy
Przykłady
Intent
poniżej poprosi o nawigację zakręt po zakręcie do ogrodu zoologicznego Taronga.
Sydney Australia:
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ć opłat drogowych ani korzystać z promu, możesz poprosić o wyznaczenie trasy stara się ich uniknąć.
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 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 pojechać motocyklem z silnikiem, możesz poprosić o wskazówki dojazdu
obejmują wąskie drogi i ścieżki niedostępne dla samochodów. intent
zwraca wartość poniżej
jaka jest trasa 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,
umożliwia podziwianie panoramicznych widoków ze wskazanych miejsc
pokrycia.
Zdjęcia sferyczne przesłane przez użytkowników,
oraz
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ć cbll
albo panoid
.
cbll
akceptuje szerokość i długość geograficzną jako wartości rozdzielone przecinkami (46.414382,10.013988
). Aplikacja wyświetli sfotografowaną panoramę w pobliżu tej lokalizacji. Ponieważ zdjęcia Street View są wysyłane okresowo odświeżony, a zdjęcia mogą być wykonywane z nieco innych pozycji za każdym razem może się zdarzyć, że lokalizacja zostanie przyciągnięta do innego po zaktualizowaniu zdjęć.panoid
to konkretny identyfikator panoramy. Mapy Google użyją identyfikatora panoramy, jeśli: określono zarównopanoid
, jak icbll
. Identyfikatory panoram są dostępne aplikacji na AndroidaStreetViewPanoramaLocation
.cbp
to opcjonalny parametr, który dostosowuje początkową orientację komponentu aparat fotograficzny. Parametrcbp
przyjmuje 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 położenie, powiększenie i przechylenie. Pierwsza i trzecia wartości nie są obsługiwane i powinny być ustawione na0
.bearing
: wskazuje kierunek kompasu w stopniach w prawo z północy. Rzeczywista północ to 0, wschód to 90, południe to 180, a zachód to 270. Wartości przekazane do przesłania zawijają się, czyli 0°, 360° i 720° i kieruj je w tym samym kierunku. Orientacja jest definiowana jako druga z pięciu rozdzielane przecinkami.zoom
: ustawia poziom powiększenia kamery. Ustawiono domyślny poziom powiększenia. przy 0. Powiększenie 1 spowodowałoby dwukrotne zwiększenie powiększenia. Powiększenie jest ograniczone od 0 do maksymalnego poziomu powiększenia bieżącej panoramy. Oznacza to, że każda wartość spoza tego zakresu zostanie ustawiona na najbliższą skrajną skrajnością mieszczącą się w zakresie. Na przykład wartość -1 zostanie ustawiona na 0. Powiększenie jest czwartą z 5 wartości rozdzielonych przecinkami.tilt
: określa kąt obrotu kamery (w górę lub w dół). Zakres wynosi -90 od 0 do 90, przy czym 90 spogląda prosto w dół, 0 na środku horyzontu i -90 patrząc prosto w górę.
Przykłady
Poniżej znajdziesz kilka przykładów wykorzystania 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)