Podobne zamiary Map Google na Androida

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:

  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. Wskazówki dojazdu można zwrócić dla trzech środków transportu: samochodu, pieszego, rowerowego.
  4. 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") będzie 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 potrafi zidentyfikować aplikacji, która może zareagować na intencję, może ulec awarii. Z tego powodu należy najpierw sprawdzić, czy odbiorcy 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 i longitude 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. Parametr q 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. Pole label musi być określone jako ciąg znaków.

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)

Wyszukiwanie restauracji w Warszawie

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)

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ów
    • l dla motocykla
    • w 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łaty
    • h przy autostradach
    • f 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)

Trasa dojazdu do zoo Taronga

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 wszystkich wyznaczonych 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ą wyświetlane 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 identyfikator konkretnej panoramy. Mapy Google użyją identyfikatora panoramy, jeśli: określono zarówno panoid, jak i cbll. Identyfikatory panoram są dostępne aplikacji na Androida StreetViewPanoramaLocation.

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

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

Piramidy w Street View