Mapy Google na Androida Automotive

Wyłączenie odpowiedzialności

Ta usługa lub funkcja ulegną zmianie i nie są objęte żadną gwarancją jakości usług (SLA) ani zasadami wycofywania. Implementacja może się zmienić w kolejnych wersjach.

W odniesieniu do przykładowego oprogramowania, plików danych i kodu źródłowego dołączonego do tej dokumentacji: produkt jest dostarczany w stanie „w jakim jest”, bez żadnej gwarancji, a Google wyraźnie wyłącza swoją odpowiedzialność z tytułu wszelkich gwarancji, wyraźnych, dorozumianych, ustawowych i innych, w tym w stopniu nieograniczonym gwarancji wartości handlowej, przydatności do określonego celu i nienaruszania jakichkolwiek praw związanych z tym produktem.


Jeśli chcesz uruchomić nawigację w Mapach Google, korzystając z intencji Androida Automotive, możesz uruchomić nawigację.

Więcej informacji znajdziesz w artykule o zamiarze Map Google na Androida.

Więcej informacji o udostępnianiu aplikacji w pojazdach z systemem operacyjnym Android Auto lub Android Automotive znajdziesz na stronie Android do samochodów.

Przegląd

Na tej stronie opisujemy intencje, których możesz używać w Mapach Google na Androida Automotive. Szczegółową dokumentację dla deweloperów aplikacji na Androida znajdziesz tutaj:

Żądania dotyczące intencji

Aby uruchomić z intencją Mapy Google na Androida Automotive, musisz najpierw utworzyć obiekt Intent, podając jego działanie, identyfikator URI i pakiet.

  • Akcja. Wszystkie intencje Map Google są wywoływane jako działanie wyświetlenia ACTION_VIEW.

  • Identyfikator URI. Intencje Map Google korzystają z ciągów tekstowych zakodowanych za pomocą identyfikatora URI, które określają pożądane działanie wraz z danymi używanymi do jego wykonania.

  • Pakiet. Wywołanie setPackage("com.google.android.apps.maps") daje pewność, że aplikacja Mapy Google na Androida obsługuje intencję. Jeśli ten pakiet nie jest skonfigurowany, system określa, które aplikacje mogą obsługiwać intencję. Jeśli dostępnych jest wiele aplikacji, może pojawić się pytanie, której aplikacji chcesz użyć.

Po utworzeniu intencji możesz na kilka sposobów poprosić system o uruchomienie powiązanej aplikacji. Typową metodą jest przekazywanie intencji do metody [startActivity()]. System uruchomi niezbędną aplikację (w tym przypadku Mapy Google) i wykona odpowiednią Aktywność.

// Create a Uri from an intent string. Use the result to create an Intent.
Uri mapIntentUri =
Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
// Create an Intent from mapIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
// 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 będzie w stanie zidentyfikować aplikacji, która może odpowiedzieć na intencję, może ona ulec awarii. Z tego względu przed zaprezentowaniem użytkownikowi jednej z tych intencji sprawdź, czy jest zainstalowana aplikacja odbierająca dane.

Aby sprawdzić, czy aplikacja może odebrać intencję, wywołaj [resolveActivity()] w obiekcie [Intent]. Jeśli wynik nie ma wartości null, istnieje co najmniej 1 aplikacja, która może obsłużyć intencję i można ją bezpiecznie wywołać [startActivity()]. Jeśli wynik to null, nie używaj intencji i, jeśli to możliwe, wyłącz funkcję wywołującą intencję.

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

Aby na przykład uruchomić szczegółową nawigację do zoo Taronga w Sydney, możesz użyć tego kodu:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
startActivity(mapIntent);
}

Ciągi zapytania zakodowane w identyfikatorze URI

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 zmienić się na 1st%20%26%20Pike%2C%20Seattle. Spacje w ciągu znaków można zakodować za pomocą %20 lub zastąpić znakiem plusa (+).

Do kodowania ciągów znaków możesz używać metody android.net.Uri parse(). Przykład:

Uri mapIntentUri = Uri.parse("google.navigation:q=" + Uri.encode("1st & Pike, Seattle"));

Uruchom nawigację zakręt po zakręcie

Użyj tej intencji, aby uruchomić nawigację Map Google ze szczegółowymi wskazówkami do jednego lub kilku podanych adresów bądź współrzędnych. Wskazówki dojazdu są zawsze podawane z aktualnej lokalizacji użytkownika.

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

Parametry

Aby uruchomić nawigację, użyj polecenia place lub q z atrybutem waypoints (opcjonalnie). Aby opcjonalnie oznaczyć punkt pośredni jako stację ładowania, zobacz artykuł Wysyłanie planu podróży pojazdem elektrycznym do Map Google.

  • q ustawia punkt końcowy wyszukiwania elementów nawigacyjnych. Może to być szerokość i długość geograficzna lub adres w formie zapytania. Jeśli ciąg zapytania zwraca więcej niż 1 wynik, zostanie wybrany pierwszy wynik.

  • place ustawia punkt końcowy na dom lub pracę. Określ trasę do domu, aby dostać się do domu użytkownika, lub służbowy, by dostać się do miejsca pracy użytkownika.

  • avoid określa obiekty, których trasa ma unikać. Parametr avoid jest opcjonalny i można go ustawić na jedną z tych wartości:

    • t – opłaty za przejazd
    • h w przypadku autostrad
    • f za promy
  • waypoints określa co najmniej 1 miejsce pośrednie, z którego można przekierować wskazówki dojazdu do końcowego miejsca docelowego określonego w polu q. Możesz określić wiele punktów na trasie, rozdzielając miejsca za pomocą pionowej kreski (|), np. Berlin,Germany|Paris,France. Możesz użyć dowolnej liczby punktów pośrednich. Punkty na trasie będą dodawane do trasy w takiej samej kolejności, w jakiej są wymienione w adresie URL. Każdy punkt pośredni może być adresem lub współrzędnymi szerokości i długości geograficznej rozdzielonej przecinkami. Adresy oraz współrzędne szerokości i długości geograficznej mogą być przesyłane w tej samej intencji. Ciągi znaków powinny zawierać kod ucieczki za pomocą adresu URL, więc punkty pośrednie takie jak „Berlin,Niemcy|Paryż,Francja” powinny zostać przekonwertowane na wartość Berlin%2CGermany%7CParis%2CFrance.

Przykłady

Ta intencja zażąda szczegółowej nawigacji do ogrodu zoologicznego Taronga w Sydney w Australii:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Jeśli nie chcesz płacić za przejazdy ani korzystać z promów, możesz poprosić o wyznaczenie trasy, która pozwoli uniknąć tych sytuacji:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Lub, jeśli chcesz wyświetlić trasę do domu, użyj:

Uri mapIntentUri = Uri.parse("google.navigation:place=home");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Aby uruchomić szczegółową nawigację do tych 3 adresów w określonej kolejności, przejdź do zoo w Taronga jako ostateczny cel podróży q, a jako punktów pośrednich wybierz Google Sydney i Opera House:

  1. Google Sydney

  2. Sydney Opera House

  3. Zoo Taronga, Sydney

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7CSydney+Opera+House");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Podobnie jak w przypadku q, możesz reprezentować dowolny punkt na trasie zamiast adresu, podając szerokość i długość geograficzną rozdzielone przecinkami. Aby np. uruchomić tę samą nawigację z podaniem szerokości geograficznej Opery w Sydney zamiast adresu:

Uri mapIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&waypoints=Google+Sydney%7C-33.856159,151.215256");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Wyślij plan podróży pojazdem elektrycznym do Map Google

Użyj tej instrukcji nawigacji obejmującej wiele miejsc docelowych, aby określić niektóre miejsca docelowe jako postoje na ładowanie pojazdów elektrycznych (EV). Ten cel, który rozszerza intencję obejmującą wiele punktów pośrednich, pomaga kierowcom utrzymać poziom naładowania baterii pojazdu elektrycznego na tyle, aby dotrzeć do celu dzięki synchronizacji informacji o przystankach na ładowanie między aplikacjami do planowania podróży pojazdem elektrycznym a Mapami Google.

W przypadku postojów na ładowanie, cele podróży:

  • Musi zawierać nazwę i szerokość geograficzną
  • Może opcjonalnie zawierać moc wyjściową do obliczania czasu ładowania

Google używa nazwy i długości geograficznej, aby znaleźć odpowiednią stację ładowania, aby wyświetlać szczegółowe informacje, takie jak typ złączy, suma, prędkość, dostępność w czasie rzeczywistym, obsługiwane formy płatności i ciekawe miejsca. Mogą to być na przykład wskazówki dojazdu na parkingach zewnętrznych w ostatniej części nawigacji, godziny otwarcia, oceny. Aby mieć pewność, że stacje ładowania są dobrze dopasowane do danych Google, użyj właściwości <brand name>, np. ChargePoint.

Parametry

Ostateczny cel podróży

Aby ustawić stację ładowania jako ostateczne miejsce docelowe:

  • q: musi zawierać szerokość i długość geograficzną stacji ładowania.
  • q_type: 1 określa, że ostatecznym celem docelowym jest stacja ładowania.
  • q_name: nazwa ostatecznego miejsca docelowego. Wymagane, jeśli q_type ma wartość 1.
  • q_power_output_kw: podwójna liczba określająca moc wyjściową stacji ładowania w kilowatach. Opcjonalnie.

Punkty pośrednie

W przypadku punktów pośrednich wszystkie parametry są równoległymi, rozdzielanymi znakami | tablicami wartości w tej samej kolejności co punkty na trasie, bez uwzględnienia ostatecznego miejsca docelowego. Niezgodność liczby elementów w tablicach równoległych jest traktowana jako nieprawidłowa intencja.

Aby dodać co najmniej 1 punkt na trasie stacji ładowania, użyj podanych niżej parametrów. Wszystkie z nich są opcjonalne. Jeśli jedno z miejsc docelowych jest oznaczone jako stacja ładowania, wtedy jego nazwa będzie obowiązkowa.

  • waypoints: lista punktów na trasie zgodnie z zamiarem nawigacji zakręt po zakręcie. W przypadku punktów na trasie stacji ładowania musi to być długość szerokości geograficznej.

  • waypoint_types: typy według punktów pośrednich określone w postaci liczbowej. 0 to dowolny przystanek (wartość domyślna), a 1 to stacja ładowania.

  • waypoint_names: nazwy punktów pośrednich. To pole jest obowiązkowe w przypadku stacji ładowania.

  • waypoint_power_outputs_kw: podwójna liczba oznaczająca moc stacji ładowania w kilowatach. W przypadku stacji ładowania możesz opcjonalnie określić wartość mocy wyjściowej punktu pośredniego, która będzie używana jako wartość zastępcza, gdy odpowiednia stacja nie zostanie znaleziona. Puste miejsce oznacza, że nie podano żadnej wartości.

Zachowanie wygody użytkowników

W przypadku tras z wieloma miejscami docelowymi wyświetlany jest ekran z opisem trasy, ale nawigacja nie rozpocznie się automatycznie.

W przypadku poprawnie sformatowanej intencji w Mapach Google wyświetli się ekran z opisem trasy. Na ekranie opisu trasy wyświetlą się wszystkie punkty pośrednie oraz ostateczny cel podróży z intencji, a w odpowiednich przypadkach także zalecenia dotyczące opłat.

W przypadku każdego punktu pośredniego lub miejsca docelowego oznaczonego jako stacja ładowania Mapy Google wyszukają pasujące miejsce w bazie danych Google.

Jeśli znajdziemy dopasowanie, Mapy Google będą korzystać z danych Google, aby wyświetlić stację ładowania w interfejsie użytkownika i podać dla niej zalecenia dotyczące ładowania. Jeśli nie uda się znaleźć dopasowania, dane z deklaracji stacji ładowania (długość geograficzna, nazwa i moc wyjściowa) zostaną wykorzystane do wyświetlenia tej stacji w interfejsie i podadzą mu rekomendację dotyczącą ładowania.

Przykłady

Dojazd do celu przez wiele stacji ładowania

Intencja ta prowadzi do ostatniego miejsca docelowego, Port Macquarie NSW, przez 2 stacje ładowania: ChargePoint i Evie.

Miejsca docelowe w kolejności:

  1. Stacja ładowania ChargePoint (lokalizacja: -32,9599188,151,6240806, moc moc: 6,6 kW)

  2. Stacja ładowania Evie (lokalizacja: -31,9432539,152,4699808, moc wyjściowa: 350 kW)

  3. Port Macquarie, Nowa Południowa Walia

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=Port+Macquarie+NSW"
            + "&waypoints=-32.9599188%2C151.6240806%7C-31.9432539%2C152.4699808"
            + "&waypoint_types=1%7C1"
            + "&waypoint_names=ChargePoint+Charging+Station%7CEvie+Charging+Station"
            + "&waypoint_power_outputs_kw=6.6%7C350");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Nieznana moc wyjściowa

Jeśli wartość mocy wyjściowej jest nieznana, pozostaw odpowiednie gniazdo waypoint_power_outputs_kw puste. Natomiast jeśli wszystkie boksy są puste, nie trzeba określać parametru waypoint_power_outputs_kw.

Miejsca docelowe w kolejności:

  1. Stacja ładowania ChargePoint (lokalizacja: -32.9599188,151.6240806, moc wyjściowa: nieznana)

  2. Port Macquarie, Nowa Południowa Walia

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=Port+Macquarie+NSW"
            + "&waypoints=-32.9599188%2C151.6240806"
            + "&waypoint_types=1"
            + "&waypoint_names=ChargePoint+Charging+Station");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Oznacz ostateczne miejsce docelowe jako stację ładowania

Aby oznaczyć ostateczne miejsce docelowe jako stację ładowania, podaj parametry q_type, q_name i q_power_output_kw.

Miejsca docelowe w kolejności:

  1. Zoo Taronga, Sydney

  2. Stacja ładowania ChargePoint (lokalizacja: -32.9599188,151.6240806, moc wyjściowa: nieznana)

  3. Stacja ładowania Evie (lokalizacja: -31,9432539,152,4699808, moc wyjściowa: 350 kW)

Uri mapIntentUri =
    Uri.parse(
        "google.navigation:q=-31.9432539,152.4699808&q_type=1&q_name=Evie+Charging+Station&q_power_output_kw=350"
            + "&waypoints=Taronga+Zoo%2C+Sydney+Australia%7C-32.9599188%2C151.6240806"
            + "&waypoint_types=0%7C1"
            + "&waypoint_names=%7CChargePoint+Charging+Station"
            + "&waypoint_power_outputs_kw=%7C");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, mapIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);