Gdy użytkownik naciśnie przycisk w mojej aplikacji, chciałbym otworzyć standardową aplikację Google Map i pokazać konkretną lokalizację. Jak mogę to zrobić? (bez użycia com.google.android.maps.MapView
)
android
google-maps
LA_
źródło
źródło
lat: 59.915494, lng: 30.409456
, zwraca niewłaściwą pozycję.String.format("geo:%f,%f", latitude, longitude)
zwrócony ciąg przecinkami:geo:59,915494,30,409456
.Możesz też po prostu użyć http://maps.google.com/maps jako swojego identyfikatora URI
lub możesz upewnić się, że używana jest tylko aplikacja Mapy Google, co spowoduje zatrzymanie wyświetlania filtru intencji (okna dialogowego), używając
tak:
lub możesz dodać etykiety do lokalizacji, dodając ciąg w nawiasach po każdym zestawie współrzędnych, na przykład:
Aby użyć bieżącej lokalizacji użytkownika jako punktu początkowego (niestety nie znalazłem sposobu na oznaczenie bieżącej lokalizacji), po prostu upuść
saddr
parametr w następujący sposób:Dla kompletności, jeśli użytkownik nie ma zainstalowanej aplikacji map, dobrym pomysłem będzie złapanie wyjątku ActivityNotFoundException, jak stwierdza @TonyQ, wtedy możemy rozpocząć aktywność ponownie bez ograniczeń aplikacji map, możemy być całkiem pewni że nigdy nie dojdziemy do Toast na końcu, ponieważ przeglądarka internetowa jest prawidłową aplikacją do uruchamiania tego schematu adresu URL.
EDYTOWAĆ:
W przypadku wskazówek zamiar nawigacji jest teraz obsługiwany przez google.navigation
źródło
Użycie formatu String pomoże, ale musisz uważać na ustawienia regionalne. W Niemczech liczba zmiennoprzecinkowa będzie oddzielona przecinkiem zamiast kropki.
Używając
String.format("geo:%f,%f",5.1,2.1);
lokalnego języka angielskiego, wynik będzie,"geo:5.1,2.1"
ale z językiem niemieckim otrzymasz"geo:5,1,2,1"
Aby temu zapobiec, należy użyć języka angielskiego.
Aby ustawić etykietę dla punktu geograficznego, możesz rozszerzyć swój identyfikator geograficzny, używając:
!!! ale bądź ostrożny z tym geo-uri jest nadal rozwijany http://tools.ietf.org/html/draft-mayrhofer-geo-uri-00
źródło
Sprawdź tę stronę w Google:
http://developer.android.com/guide/appendix/g-app-intents.html
Możesz użyć identyfikatora URI formularza
aby otworzyć przeglądarkę map Google i wskazać lokalizację.
źródło
Czasami, jeśli nie ma żadnej aplikacji skojarzonej z geo: protocal, możesz użyć try-catch, aby uzyskać ActivityNotFoundException do obsługi tego.
Dzieje się tak, gdy używasz jakiegoś emulatora, takiego jak androVM, który nie jest domyślnie zainstalowany na mapie Google.
źródło
Możesz także użyć poniższego fragmentu kodu, dzięki czemu istnienie map Google jest sprawdzane przed rozpoczęciem intencji.
Źródła: https://developers.google.com/maps/documentation/android-api/intents
źródło
Aby przejść do lokalizacji Z PINem, użyj:
bez kodu PIN, użyj tego w uri:
źródło
Mam przykładową aplikację, w której przygotowuję intencję i po prostu przekazuję CITY_NAME w intencji do działania znacznika map, który ostatecznie oblicza długość i szerokość geograficzną przez Geocoder za pomocą CITY_NAME.
Poniżej znajduje się fragment kodu rozpoczynania działania znacznika map i kompletna aktywność MapsMarker.
Linki wygasają, więc wkleiłem cały kod powyżej, ale na wszelki wypadek, jeśli chcesz zobaczyć pełny kod, jest dostępny pod adresem : https://github.com/gosaliajigar/CSC519/tree/master/CSC519_HW4_89753
źródło
Jest to napisane w Kotlinie, otworzy aplikację map, jeśli zostanie znaleziona, umieści punkt i pozwoli Ci rozpocząć podróż:
Zamień
requireActivity()
naContext
.źródło