Moja aplikacja musi pokazywać trasy Map Google od A do B, ale nie chcę wstawiać Map Google do mojej aplikacji - zamiast tego chcę uruchomić ją przy użyciu zamiaru. czy to możliwe? Jeśli tak to jak?
java
android
google-maps
android-intent
Lars D.
źródło
źródło
Odpowiedzi:
Możesz użyć czegoś takiego:
Aby rozpocząć nawigację od bieżącej lokalizacji, usuń
saddr
parametr i wartość.Możesz użyć rzeczywistego adresu zamiast szerokości i długości geograficznej. Daje to jednak użytkownikowi okno dialogowe do wyboru między otwarciem go za pomocą przeglądarki lub Map Google.
Spowoduje to bezpośrednie uruchomienie Map Google w trybie nawigacji:
AKTUALIZACJA
W maju 2017 r. Google uruchomił nowy interfejs API dla uniwersalnych, wieloplatformowych adresów URL Map Google:
https://developers.google.com/maps/documentation/urls/guide
Z nowego interfejsu API można również korzystać z funkcji Intents.
źródło
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Jest to trochę nie na temat, ponieważ poprosiłeś o „wskazówki”, ale możesz również użyć schematu Geo URI opisanego w Dokumentacji Androida:
http://developer.android.com/guide/appendix/g-app-intents.html
Problem z użyciem „geo: szerokość, długość” polega na tym, że Mapy Google są wyśrodkowane tylko w twoim punkcie, bez żadnej pinezki ani etykiety.
To dość mylące, zwłaszcza jeśli musisz wskazać konkretne miejsce lub zapytać o drogę.
Jeśli użyjesz parametru zapytania „geo: lat, lon? Q = name”, aby oznaczyć swój geopoint, użyje on zapytania do wyszukiwania i odrzuci parametry lat / lon.
Znalazłem sposób na wyśrodkowanie mapy za pomocą lat / lon i wyświetlanie pinezki z niestandardową etykietą, bardzo ładnej do wyświetlania i przydatnej, gdy pytasz o drogę lub inną akcję:
UWAGA (autor @TheNail): Nie działa w Maps v.7 (najnowsza wersja w momencie pisania). Zignoruje współrzędne i poszuka obiektu o podanej nazwie między nawiasami. Zobacz także Intent dla Google Maps 7.0.0 z lokalizacją
źródło
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?Chociaż obecne odpowiedzi są świetne, żadna z nich nie zrobiła tego, czego szukałem, chciałem tylko otworzyć aplikację map, dodać nazwę dla każdej lokalizacji źródłowej i docelowej, użycie schematu geograficznego URI nie zadziałałoby dla mnie w ogóle, a link do mapy nie miał etykiet, więc wymyśliłem to rozwiązanie, które jest zasadniczo połączeniem innych rozwiązań i komentarzy tutaj napisanych, mam nadzieję, że jest to pomocne dla innych osób przeglądających to pytanie.
Aby użyć bieżącej lokalizacji jako punktu początkowego (niestety nie znalazłem sposobu na oznaczenie bieżącej lokalizacji), użyj następujących
Dla kompletności, jeśli użytkownik nie ma zainstalowanej aplikacji map, dobrym pomysłem będzie złapanie wyjątku ActivityNotFoundException, wtedy możemy ponownie rozpocząć aktywność bez ograniczeń aplikacji map, możemy być całkiem pewni, że nigdy nie dostaniemy do Toast na końcu, ponieważ przeglądarka internetowa jest prawidłową aplikacją do uruchamiania tego schematu URL.
PS Wszelkie szerokości i długości geograficzne użyte w moim przykładzie nie są reprezentatywne dla mojej lokalizacji, każde podobieństwo do prawdziwej lokalizacji jest czystym zbiegiem okoliczności, alias nie jestem z Afryki: P
EDYTOWAĆ:
Aby uzyskać wskazówki, cel nawigacji jest teraz obsługiwany przez google.navigation
źródło
Korzystanie z najnowszych wieloplatformowych adresów URL Map Google : Nawet jeśli brakuje aplikacji Google Maps, otworzy się w przeglądarce
Przykład https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
źródło
Otwórz Mapy Google, używając Intent z różnymi trybami:
Możemy otworzyć aplikację Google Maps przy użyciu zamiaru:
Tutaj „mode = b” dotyczy roweru.
Możemy ustawić tryb jazdy, chodzenia i jazdy rowerem za pomocą:
Możesz znaleźć więcej informacji na temat zamiarów w Google Maps tutaj .
Uwaga: jeśli nie ma trasy dla roweru / samochodu / pieszego, wyświetli się komunikat „Nie można znaleźć drogi”
Można sprawdzić mój oryginalny odpowiedź tutaj .
źródło
Możesz spróbować otworzyć wbudowaną aplikację Android Maps, korzystając z tej
Intent.setClassName
metody.źródło
W przypadku wielu punktów nawigacyjnych można również zastosować następujące.
Pierwszy zestaw współrzędnych to twoja początkowa lokalizacja. Wszystkie następne są punktami drogi, przez którą planowana trasa przebiega.
Po prostu dodawaj punkty, kończąc na końcu „/ szerokość, długość”. Według dokumentów Google istnieje limit 23 punktów na drodze . Nie jestem pewien, czy dotyczy to również Androida.
źródło
Jeśli chcesz wyświetlić szerokość i długość geograficzną z bieżącego kierunku, możesz użyć tego:
Poniższe zapytanie pomoże ci to wykonać. Tutaj możesz podać szerokość i długość geograficzną miejsca docelowego:
Użyj powyżej jako:
Lub jeśli chcesz wyświetlać według lokalizacji, użyj:
Więcej informacji tutaj: Google Maps Intents dla Androida
źródło
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google
DirectionsView
z lokalizacją źródłową jako bieżącą lokalizację i lokalizację docelową podaną jako ciągPowyżej
destinationCityName
znajduje się zmienny ciąg znaków, w zależności od potrzeb.źródło
Spróbuj tego
źródło
Oto, co zadziałało dla mnie:
źródło
jeśli znasz punkt A, punkt B (i dowolne elementy lub ścieżki pomiędzy nimi), możesz użyć pliku KML wraz z twoją intencją.
Aby uzyskać więcej informacji, zobacz tę odpowiedź SO
UWAGA: w tym przykładzie użyto przykładowego pliku, który (od marca 13) jest nadal online. jeśli przejdzie w tryb offline, znajdź plik kml online i zmień swój adres URL
źródło
Najpierw musisz teraz, abyś mógł korzystać z niejawnego zamiaru, dokumentacja Androida zapewnia nam bardzo szczegółowe wspólne zamiary dotyczące wdrożenia zamiaru mapy, musisz stworzyć nowy zamiar z dwoma parametrami
Do akcji, której możemy użyć,
Intent.ACTION_VIEW
a dla Uri powinniśmy ją zbudować, poniżej załączyłem przykładowy kod, aby utworzyć, zbudować, rozpocząć działanie.źródło
<scheme>://<authority><absolute path>?<query>#<fragment>
nie nieprzejrzystych URI<scheme>:<opaque part>#<fragment>
. Powyższy kod daje następujący identyfikator URI:geo:/0%2C0?Eiffel%20Tower
co powoduje awarię aplikacji Google Maps. Nawet oficjalna dokumentacja używa surowych / nieprzezroczystych identyfikatorów URI z tego właśnie powodu. Poprawny kod brzmiałby wtedy:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Ładne rozwiązanie dla kotlin, wykorzystujące najnowszą odpowiedź międzyplatformową wspomnianą przez lakshman sai ...
Bez zbędnych Uri.toString i Uri.parse, ta odpowiedź jest czysta i minimalna:
źródło
W ten sposób możesz uruchamiać Mapy Google, korzystając z systemu Android
źródło