Podobne zamiary Map Google na Androida

Aplikacja Mapy Google na Androida udostępnia kilka intencji, które możesz wykorzystać do uruchomienia Map Google w trybie wyświetlania, wyszukiwania, nawigacji lub Street View. Jeśli chcesz osadzić mapę w aplikacji, zapoznaj się z przewodnikiem interfejsu API Map Google na Androida.

Omówienie

Intencje umożliwiają rozpoczęcie działania w innej aplikacji poprzez opisanie prostego działania (np. „wyświetlanie mapy” lub „wyświetlanie trasy do lotniska”) 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ń:

  1. Wyświetlanie mapy w określonej lokalizacji i poziomie powiększenia.
  2. wyszukiwać lokalizacje i miejsca oraz wyświetlać je na mapie;
  3. Wyznacz trasę z jednego miejsca do drugiego. Wskazówki mogą być zwracane dla 3 rodzajów transportu: samochodem, pieszo lub rowerem.
  4. wyświetlać panoramy w Google Street View.

Ta strona opisuje intencje, których możesz używać w aplikacji Mapy Google na Androida. Więcej informacji o intencjach i filtrach intencji oraz intencjach wspólnych dla platformy Android znajdziesz w dokumentacji dla deweloperów Androida.

Żądania dotyczące intencji

Aby uruchomić Mapy Google z zamierzeniem, 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 wyświetlania — ACTION_VIEW.
  • URI intencje Map Google używają kodowanych adresów URL, które określają pożądane działanie wraz z niektórymi danymi umożliwiającymi wykonanie tego działania.
  • Pakiet: wywołanie funkcji setPackage("com.google.android.apps.maps") spowoduje, że aplikacja Mapy Google na Androida obsłuży intencję. Jeśli pakiet nie jest ustawiony, system określi, które aplikacje mogą obsługiwać Intent. Jeśli dostępnych jest kilka aplikacji, użytkownik może zostać poproszony o wybranie tej, której chce użyć.

Po utworzeniu Intent możesz poprosić system o uruchomienie powiązanej aplikacji na kilka sposobów. Typową metodą jest przekazanie wartości Intent do metody startActivity(). System uruchomi niezbędną aplikację (w tym przypadku Mapy Google) i 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ę, aplikacja może się zawiesić. Dlatego zanim przedstawisz użytkownikowi jeden z tych zamiarów, musisz najpierw sprawdzić, czy aplikacja odbiorcza jest zainstalowana.

Aby sprawdzić, czy aplikacja może odebrać intencję, wywołaj funkcję resolveActivity() w obiekcie Intent. Jeśli wynik jest inny niż null, istnieje co najmniej 1 aplikacja, która może obsłużyć ten zamiar, i można go bezpiecznie wywołać.startActivity() Jeśli wynik to null, nie używaj tej intencji. Jeśli to możliwe, wyłącz funkcję, która wywołuje tę intencję.

Java

if (mapIntent.resolveActivity(getPackageManager()) != null) {
  ...
}

Kotlin

mapIntent.resolveActivity(packageManager)?.let {
  ...
}

Aby 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 tekstowe zapytań zakodowane w adresie URL;

Wszystkie ciągi przekazywane do Map Google Intents muszą być zakodowane w formacie URI. Na przykład ciąg „1st & Pike, Seattle” powinien zostać zastąpiony przez 1st%20%26%20Pike%2C%20Seattle. Spacje w ciągu 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 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 poziomie powiększenia.

geo:latitude,longitude?z=zoom

Parametry

  • latitudelongitude ustawiają punkt środkowy mapy.
  • z opcjonalnie ustawia początkowy poziom powiększenia mapy. Akceptowane wartości wahają się od 0 (cały świat) do 21 (poszczególne budynki). Górna granica 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żywaj tego zamiaru, aby wyświetlać zapytania w określonym widoku. Gdy zapytanie ma jeden wynik, możesz użyć tego zamiaru, aby wyświetlić pin w określonym miejscu lub pod określonym adresem, np. w przypadku 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 służących do wyświetlania mapy wyszukiwarka obsługuje też te parametry:

  • q określa miejsca, które mają być wyróżnione na mapie. Parametr q jest wymagany w przypadku wszystkich żądań wyszukiwania. Może ona przyjmować lokalizację jako nazwę miejsca lub adres. Ciąg powinien być zakodowany w adresie URL, więc adres taki jak „Urząd Miasta, Warszawa, Mazowieckie” powinien zostać przekonwertowany na Urząd+Miasta,Warszawa,Mazowsze.

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

Jeśli podasz ogólne hasło wyszukiwania, Mapy Google spróbują znaleźć lokalizację w pobliżu podanych współrzędnych geograficznych, która spełnia Twoje kryteria. Jeśli nie zostanie określona lokalizacja, Mapy Google spróbują znaleźć informacje o miejscach 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)

Szukanie restauracji w San Francisco

Możesz jeszcze bardziej sprecyzować wyniki wyszukiwania, podając parametr zoomu wraz z ciągiem zapytania. W przykładzie poniżej dodanie powiększenia 10 spowoduje, że restauracje będą wyszukiwane 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 konkretnego adresu spowoduje wyświetlenie w tym miejscu pinu.

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 ustawiono współrzędne lat/lng na 0,0, ale adres jest przekazywany jako ciąg znaków zapytania. W przypadku wyszukiwania bardzo konkretnej lokalizacji współrzędne geograficzne nie są wymagane. 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 „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 współrzędnych geograficznych do identyfikatora URI intencji spowoduje, że wyniki będą bardziej trafne w przypadku danego 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 jedną wartość, możesz przekazać opcjonalną etykietę. Etykiety muszą być podawane jako ciągi znaków i wyświetlane pod znacznikiem mapy. Pamiętaj, że etykiety są dostępne tylko wtedy, gdy q jest określony jako współrzędna lat/lng.

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 ulicznego lub współrzędnych geograficznych możesz wyświetlić pin w znanej lokalizacji za pomocą 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

Uruchamianie nawigacji zakręt po zakrętem

Użyj tej intencji, aby 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 obecnej lokalizacji użytkownika.

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude

Parametry

  • q: ustawia punkt docelowy dla wyszukiwania nawigacyjnego. Ta wartość może być współrzędnymi szerokości i długości geograficznej lub adresem w formacie zapytania. Jeśli jest to ciąg znaków zapytania, który zwraca więcej niż 1 wynik, zostanie wybrany pierwszy wynik.

  • mode określa sposób transportu. Tryb jest opcjonalny i może być ustawiony na jeden z tych trybów:

    • d samochodem (domyślnie)
    • b na rowerze
    • l motocyklem
    • w na spacery
  • avoid określa cechy, których trasa powinna unikać. Opcja unikania jest opcjonalna i może być ustawiona na jeden z tych elementów:

    • t za opłaty drogowe
    • h na autostradach
    • f dla promów

Przykłady

Poniższe Intent poprosi o szczegółową nawigację do Taronga Zoo 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ć za przejazd przez bramki lub nie chcesz korzystać z promu, możesz poprosić o wyznaczenie trasy, która ich uniknie.

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ę się poruszać, możesz poprosić o wskazanie trasy rowerowej.

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 korzystać z motocykla, możesz poprosić o to, aby trasa obejmowała wąskie drogi i ścieżki niedostępne dla samochodów. Poniższa wartość 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

Aby uruchomić Google Street View, użyj intencji google.streetview. Google Street View zapewnia widoki panoramiczne z wybranych miejsc w obszarze. Dostępne są też Photospheres przesłane przez użytkownikówspecjalne 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.

  • cbll przyjmuje 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 aktualizowane, a zdjęcia mogą być robione z nieco innych pozycji, dlatego po aktualizacji zdjęć Twoja lokalizacja może się zmienić na inną panoramę.

  • panoid to identyfikator konkretnej panoramy. Jeśli podasz zarówno panoid, jak i cbll, Mapy Google użyją identyfikatora panoramy. Identyfikatory panoramy 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 oddzielonych 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 przechylenie. Pierwsza i trzecia wartość nie są obsługiwane i powinny być ustawione na 0.

    • bearing: określa kierunek na kompasie, w którym zwrócona jest kamera, w stopniach w prawo od północy. Prawdziwa północ to 0, wschód to 90, południe to 180, a zachód to 270. Wartości przekazane do atrybutu bearing zostaną zawinięte, co oznacza, że 0°, 360° i 720° wskazują w tym samym kierunku. Kierunek jest zdefiniowany jako druga z 5 wartości rozdzielonych przecinkami.
    • zoom: ustawia poziom powiększenia kamery. Domyślny poziom powiększenia to 0. Powiększenie 1 podwaja powiększenie. Powiększenie jest ograniczone do zakresu od 0 do maksymalnego powiększenia bieżącej panoramy. Oznacza to, że każda wartość wykraczająca poza ten zakres zostanie ustawiona na najbliższą wartość skrajną, która mieści się w tym zakresie. Na przykład wartość -1 zostanie ustawiona na 0. Powiększenie to czwarta z 5 wartości rozdzielonych przecinkami.
    • tilt: określa kąt, w którym skierowana jest kamera (w górę lub w dół). Zakres wynosi od -90 do 90, przy czym 90 to widok w dół, 0 to środek horyzontu, a -90 to widok w górę.

Przykłady

Poniżej znajdziesz kilka przykładów użycia intencji związanej ze 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