Podobne zamiary Map Google na Androida

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:

  1. Wyświetlaj mapę w określonej lokalizacji i powiększeniu.
  2. Wyszukuj lokalizacje lub miejsca i wyświetlaj je na mapie.
  3. 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.
  4. 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 i longitude 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. Parametr q 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. Element label musi być określony jako String.

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)

Wyszukiwanie restauracji w San Francisco

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)

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 rowerem
    • l dla motocykla
    • w 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 przejazd
    • h w przypadku autostrad
    • f 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)

Trasa dojazdu do zoo Taronga

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ówno panoid, jak i cbll. Identyfikatory panoram są dostępne dla aplikacji na Androida z obiektu StreetViewPanoramaLocation.

  • cbp to opcjonalny parametr, który dostosowuje początkową orientację kamery. Parametr cbp 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 na 0.

    • 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)

Piramidy w Street View