Podobne zamiary Map Google na Androida

Aplikacja Mapy Google na Androida udostępnia kilka intencji, które pozwalają uruchomić Mapy Google w trybach wyświetlania, wyszukiwania, nawigacji i Street View. Jeśli chcesz umieścić mapę w swojej aplikacji, zapoznaj się z wprowadzeniem do interfejsu API Map Google na Androida.

Przegląd

Intencje umożliwiają rozpoczęcie działania w innej aplikacji przez opisanie prostego działania, które chcesz wykonać (np. „wyświetlenie mapy” lub „pokaż trasę 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ć jedną z czterech czynności:

  1. Możesz wyświetlić mapę w określonej lokalizacji i na poziomie powiększenia.
  2. Wyszukaj lokalizacje lub miejsca i wyświetl je na mapie.
  3. Uzyskiwanie wskazówek dojazdu z jednego miejsca do drugiego. Trasa dojazdu może zostać zwrócona dla trzech środków transportu: samochodem, pieszo i rowerem.
  4. Wyświetl zdjęcia panoramiczne w Google Street View.

Na tej stronie opisujemy intencje, których można używać w aplikacji Mapy Google na Androida. Więcej informacji o filtrach intencji i intencji oraz intencjach wspólnych dla platformy Androida znajdziesz w dokumentacji dla programistów aplikacji na Androida.

Żądania intencji

Aby uruchomić Mapy Google z intencją, musisz najpierw utworzyć obiekt Intent z jego działaniem, identyfikatorem URI i pakietem.

  • 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 oczekiwane działanie oraz dane, na podstawie których ma ono zostać wykonane.
  • Pakiet: wywołanie setPackage("com.google.android.apps.maps") upewnia się, ż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ć plik Intent. Jeśli dostępnych jest wiele aplikacji, użytkownik może zostać zapytany, której z nich chce użyć.

Po utworzeniu Intent możesz na kilka sposobów poprosić system o uruchomienie powiązanej aplikacji. Popularną metodą jest przekazanie 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 znajdzie aplikacji, która może zareagować na intencję, może dojść do awarii aplikacji. Z tego względu przed zaprezentowaniem użytkownikowi jednego z tych intencji musisz sprawdzić, czy jest zainstalowana aplikacja odbierająca.

Aby sprawdzić, czy aplikacja może odbierać intencję, wywołaj metodę resolveActivity() w obiekcie Intent. Jeśli wynik nie ma wartości null, istnieje co najmniej 1 aplikacja, która może obsłużyć zamiar i można bezpiecznie wywołać metodę startActivity(). Jeśli wynik to null, nie używaj intencji i – jeśli to możliwe – wyłącz 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. Na przykład ciąg „1st & Pike, Seattle” powinien wyglądać tak: 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 i longitude ustawiają punkt środkowy mapy.
  • z opcjonalnie ustawia początkowy poziom powiększenia mapy. Akceptowane wartości mieszczą się w zakresie 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

Użyj tej intencji, aby wyświetlać wyszukiwane hasła w określonym widocznym obszarze. Jeśli zapytanie zwróci pojedynczy wynik, możesz użyć tej intencji, aby wyświetlić pinezkę w konkretnym miejscu lub adresie, np. punkt orientacyjny, firma, obiekt geograficzny lub miejscowość.

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:

  • q określa miejsca do wyróżnienia na mapie. Parametr q jest wymagany w przypadku wszystkich żądań wyszukiwania. Akceptuje lokalizację jako nazwę lub adres. Ciąg powinien być zakodowany w adresie URL, więc adres taki jak „City Hall, New York, NY” powinien zostać przekonwertowany na „City+Hall,New+York,”

  • label umożliwia ustawienie własnej etykiety w miejscu wskazanym na mapie. Pole label musi być określone jako ciąg znaków.

Jeśli przekażesz ogólne wyszukiwane hasło, Mapy Google spróbują znaleźć lokalizację w pobliżu podanej szerokości i długości geograficznej, która odpowiada Twoim kryteriom. Jeśli nie podasz lokalizacji, Mapy Google spróbują znaleźć pobliskie wizytówki. 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 Warszawie

Aby jeszcze bardziej uprzedzać wyniki wyszukiwania, określ parametr zoom i ciąg zapytania. W przykładzie poniżej dodanie powiększenia o 10 spowoduje 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)

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 tym przykładzie można ustawić szerokość i długość geograficzną 0,0, ale adres 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 przez określenie współrzędnych. 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 spowoduje zniekształcenie wyników w kierunku określonego 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 jako ciąg znaków. Będą one widoczne pod znacznikiem mapy. Pamiętaj, że etykiety są dostępne tylko wtedy, gdy q jest określony jako współrzędna dł./szerokoś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 lub szerokości i długości geograficznej możesz wyświetlić pinezkę w znanej lokalizacji wraz z kodem plusa.

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

Dzięki temu możesz uruchomić nawigację w Mapach Google ze szczegółowymi wskazówkami dojazdu do określonego 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. 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.

  • mode ustawia środek transportu. Tryb jest opcjonalny i można go ustawić na jeden z tych:

    • d do jazdy samochodem (domyślnie)
    • b dla rowerów
    • l dla motocykla
    • w do trasy pieszej
  • avoid określa miejsca, których trasa powinna unikać. Opcja „Unikaj” jest opcjonalna i można ją ustawić na co najmniej 1 z tych ustawień:

    • t za opłaty
    • h przy autostradach
    • f za promy

Przykłady

Użytkownik Intent poniżej poprosi o szczegółowe wskazówki dojazdu 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)

Trasa dojazdu do zoo Taronga

Jeśli nie chcesz płacić opłat drogowych ani korzystać z promów, możesz poprosić o trasę, która pozwoli 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 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 uwzględnienie wąskich dróg i szlaków niedostępnych dla samochodów. intent poniżej 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 zapewnia panoramiczne widoki z wyznaczonych lokalizacji na całym obszarze zasięgu. 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 obiektu google.streetview muszą zawierać parametr cbll lub panoid.

  • cbll jako szerokość i długość geograficzną jako wartości rozdzielone przecinkami (46.414382,10.013988). Aplikacja wyświetli panoramę sfotografowaną najbliżej tego miejsca. Zdjęcia Street View są okresowo odświeżane i za każdym razem mogą zostać wykonane z nieco innych pozycji, dlatego podczas aktualizowania zdjęć lokalizacja może zostać ustawiona na inną panoramę.

  • panoid to identyfikator konkretnej panoramy. Mapy Google będą używać identyfikatora panoramy, jeśli określisz 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 ma 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 przesunięcie, powiększenie i pochylenie. Pierwsza i trzecia wartość nie są obsługiwane i powinny być ustawione na 0.

    • bearing: wskazuje kierunek kompasu w stopniach w kierunku zgodnym z ruchem wskazówek zegara, od północy. Rzeczywista północ to 0, wschód to 90, południe to 180, a zachód to 270. Wartości przekazane do kierunku zawijają się, czyli wszystkie punkty w kierunkach 0°, 360° i 720° są zawijane. Ocena to druga z pięciu wartości rozdzielonych przecinkami.
    • zoom: ustawia poziom powiększenia kamery. Domyślny poziom powiększenia jest ustawiony na 0. Powiększenie 1 spowodowałoby dwukrotne zwiększenie powiększenia. Powiększenie jest zmniejszane do wartości od 0 do maksymalnego poziomu dla bieżącej panoramy. Oznacza to, że każda wartość wykraczająca poza ten zakres jest ustawiana na najbliższą ekstremalną wartość mieszczącą się w danym 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 od -90 do 90, przy czym 90 wygląda prosto w dół, 0 na horyzoncie, a -90 na horyzoncie.

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)

Piramidy w Street View