Włącz szczegółowy plik danych

Plik danych zakręt po zakręcie dostarcza tylko informacji nawigacyjnych urządzeniom, które nie który służy do prowadzenia nawigacji na podstawie map. Zapewnia to, że w zbliżających się manewrach dostarczane przez Ciebie elementy:

  • ikony (w lewo, w prawo, zawróć)
  • numery skrętu na rondach
  • nazwy dróg
  • szacowana odległość i czas do następnego etapu nawigacji lub ostatniego miejsce docelowe

Możesz korzystać z kart zakręt po zakręcie, aby tworzyć doświadczenia, w których Interfejs Navigation SDK nie jest odpowiedni, na przykład w Androidzie Auto lub w małych gdy pełny stos Androida nie jest dostępny. Na przykład: dla kierowców pojazdów dwukołowych. Możesz wyświetlać wskazówki dojazdu, które pomogą im szybciej dotrzeć do celu i korzystać z innych funkcji przy minimalnym rozpraszaniu uwagi.

Aby korzystać z pakietu SDK, musisz utworzyć usługę i zarejestrować ją w Pakiet Navigation SDK na Androida, aby mógł otrzymywać nowe informacje nawigacyjne. w czasie rzeczywistym (mniej więcej raz na sekundę podczas nawigacji).

W tym dokumencie opisujemy, jak utworzyć i zarejestrować usługę nawigacji, która odbiera informacje nawigacyjne z pakietu SDK i udostępnia stan nawigacji do urządzenia odbierającego.

Omówienie

W tej sekcji opisujemy, jak dodać do projektów bibliotekę TurnByTurn oraz podsumowuje ogólny proces tworzenia funkcji zakręt po zakręcie.

Aby skorzystać z samodzielnej wersji biblioteki TurnByTurn, wykonaj następujące czynności:

  1. Skonfiguruj środowisko, aby uzyskać dostęp do repozytorium Maven hosta:

    Maven

    Dodaj do pliku pom.xml te informacje:

        <project>
          ...
          <repositories>
            <repository>
              <id>google-maven-repository</id>
              <url>https://maven.google.com</url>
            </repository>
          </repositories>
          ...
        </project>
        
        

    Gradle

    Dodaj do pliku build.gradle te informacje:

    repositories {
        ...
        google()
    }
        
  2. Dodaj tę zależność do konfiguracji Maven lub Gradle:
  3. Maven

    <dependencies>
    ...
    <dependency>
          <groupId>com.google.android.maps</groupId>
          <artifactId>google_turnbyturn</artifactId>
          <version>1.0.0</version>
    </dependency>
    </dependencies>
        
        

    Gradle

    dependencies {
      ...
      implementation 'com.google.android.maps:google_turnbyturn:1.0.0'
    }
        

Dodaj bibliotekę TurnByTurn do projektu za pomocą pobranego pliku JAR (alternatywnie)

Biblioteka TurnByTurn jest dostępna jako plik JAR w tym folderze pakietu SDK. Jeśli nie masz dostępu, skontaktuj się z przedstawicielem.

  1. Pobierz i rozpakuj google_turnbyturn_*.jar.
  2. Skopiuj pobrany plik JAR do katalogu app/libs projektu.
  3. Dodaj ten kod do pliku build.gradle, aby uwzględnić plik JAR w kompilacji.

    dependencies {
       ...
       api fileTree(include: ['*.jar'], dir: 'libs')
    }
    

Korzystanie z biblioteki TurnByTurn

Oto ogólne kroki, które musisz wykonać, aby włączyć funkcję zakręt po zakręcie. które zawierają szczegółowe informacje o poszczególnych krokach.

  1. Utwórz usługę, aby otrzymywać aktualizacje nawigacji.

  2. Zarejestruj usługę.

  3. Zapoznaj się ze stanami nawigacji.

  4. Zobacz przykład interfejsu nawigacji, który zawiera niezbędne elementy.

Utwórz usługę, aby otrzymywać aktualizacje nawigacji

Navigation SDK tworzy powiązanie z usługą TurnByTurn oraz wysyła aktualizacje nawigacji przez Androida Czat , Możesz utworzyć nową usługę nawigacji na potrzeby tych aktualizacji lub użyć istniejącej posprzedażna.

Zaletą korzystania z usługi do otrzymywania aktualizacji nawigacji jest to, że jest ona mogą funkcjonować w ramach osobnego procesu w tle.

Usługa w poniższym przykładzie otrzymuje informacje nawigacyjne i korzysta TurnByTurnManager, aby przekonwertować dane na obiekt NavInfo, który który zawiera szczegóły nawigacji.

/**
 *   Receives turn-by-turn navigation information forwarded from NavSDK.
 */
public class NavInfoReceivingService extends Service {
  /** The messenger used by the service to receive nav step updates. */
  private Messenger incomingMessenger;
  private TurnByTurnManager turnByTurnManager;

  private final class IncomingNavStepHandler extends Handler {
    public IncomingNavStepHandler(Looper looper) {
      super(looper);
    }

    @Override
    public void handleMessage(Message msg) {
      // Identify the message through the msg.what field.
      if (TurnByTurnManager.MSG_NAV_INFO == msg.what) {
        // Extract the NavInfo object using the TurnByTurnManager.
        NavInfo navInfo = turnByTurnManager
          .readNavInfoFromBundle(msg.getData()));
      // Do something with the NavInfo
    }
  }
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
  return incomingMessenger.getBinder();
}

@Override
public void onCreate() {
  turnByTurnManager = TurnByTurnManager.createInstance();
  HandlerThread thread =
    new HandlerThread("NavInfoReceivingService",
      Process.THREAD_PRIORITY_DEFAULT);
  thread.start();
  incomingMessenger = new Messenger(
    new IncomingNavStepHandler(thread.getLooper()));
}

Kody wiadomości

NavInfo wiadomości można zidentyfikować za pomocą Message.what klasy Message, która jest ustawiona na wartość TurnByTurnManager.MSG_NAV_INFO.

Rejestrowanie usługi na potrzeby aktualizacji nawigacji

Poniższe fragmenty kodu rejestrują usługę nawigacji.

boolean isNavInfoReceivingServiceRegistered =
          navigator.registerServiceForNavUpdates(
              getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);

Uruchamianie i zatrzymywanie usługi

Usługa nawigacji jest aktywna, póki Zostanie z nim powiązany pakiet SDK Navigation. Możesz zadzwonić ręcznie startService() i stopService(), aby kontrolować czas działania usługi nawigacji ale gdy zarejestrujesz usługę w pakiet SDK Navigation uruchamia się automatycznie, zatrzymuje się tylko wtedy, gdy go wyrejestrujesz. W zależności od tego, jak skonfigurujesz aplikację, warto rozważyć uruchomienie usługi na pierwszym planie, opisanej w artykule na temat dokumentacja Usługi .

Wyrejestrowywanie usługi

Aby przestać otrzymywać aktualizacje nawigacji, wyrejestruj usługę z Pakiet SDK do nawigacji.

navigator.unregisterServiceForNavUpdates();

Informacje o stanach nawigacji

Użyj funkcji NavInfo.getNavState(), aby uzyskać bieżący stan nawigacji, czyli jeden spośród następujących:

  • Trasa – stan ENROUTE oznacza, że nawigacja z przewodnikiem jest w tej chwili aktywny, a użytkownik jest na wskazanej trasie. Informacje o bieżącym dostępny jest następny krok manewru.

  • Zmiana trasyREROUTING oznacza, że trwa nawigacja, ale nawigator szuka nowej trasy. Następny krok manewru to nie ponieważ nie ma jeszcze nowej trasy. W przykładowej aplikacji komunikat „Ponowne wyznaczanie trasy...” w: na ekranie informacji nawigacyjnych. Po znalezieniu trasy pojawi się komunikat NavInfo. wysłany ze stanem ENROUTE.

  • ZatrzymanoSTOPPED oznacza, że nawigacja została zakończona. Na przykład nawigacja zatrzymuje się, gdy użytkownik opuści nawigację w aplikacji. W przykładowej aplikacji parametr Stan STOPPED wyczyści wyświetlacz informacji nawigacyjnych, aby zapobiec pozostawaniu w nim niepotrzebnego kroku instrukcji.

Wypełnianie widoku kanału

Po skonfigurowaniu usługi zakręt po zakręcie w tej sekcji elementów wizualnych i tekstowych, których możesz użyć do wypełnienia kart ze wskazówkami dotyczącymi szczegółowy plik danych.

Ekran urządzenia mobilnego, na którym wyświetlany jest najbliższy skręt w lewo za 30 metrów w kierunku W Ahwanee
Ave. Na dole ekranu pozostały czas do celu to 46 minut,
a pozostały dystans to 39
mil.

Gdy użytkownik uruchomi nawigację z przewodnikiem, u góry pojawi się karta nawigacyjna, zawierający dane nawigacyjne zebrane z Pakiet SDK do nawigacji. Powiązany obraz przedstawia przykład tych niezbędnych elementów nawigacyjnych.

Ta tabela zawiera pola na informacje nawigacyjne i miejsca, w których można je znaleźć.

Pola dla każdego kroku nawigacji Pola dotyczące całej podróży
Znaleziono w: StepInfo Znaleziono w: NavInfo
Pełna nazwa drogi Pozostały czas
Ikona manewru Odległość do celu
Odległość do następnego kroku
Pola informacji dotyczących pasa ruchu

Asystent pasa ruchu

Pakiet Navigation SDK reprezentuje pasy w nawigacji. odwróć kartę jako Lenina oraz LaneDirection obiektów danych. Obiekt Lane reprezentuje konkretny pas ruchu podczas nawigacji i ma listę obiektów LaneDirection opisujących wszystkie skręty, które można z tego pasa.

Przykładowy asystent pasa ruchu
konfiguracji.

Zalecany kierunek jazdy użytkownika na danym pasie jest oznaczony isRecommended .

Przykład asystenta pasa ruchu

Ten fragment ilustruje dane dotyczące wyświetlanych pasów ruchu powyżej.

// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
                  {/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]

// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]

Twórz ikony do wykonywania manewrów

Maneuver wyliczenie określa każdy możliwy manewr, który może wystąpić podczas nawigacji. może wykonać manewr w danym kroku za pomocą metody StepInfo.getManeuver().

Musisz utworzyć ikony manewrowe i połączyć je z powiązanymi manewrami. W przypadku niektórych manewrów możesz skonfigurować mapowanie ikony wprost, na przykład DESTINATION_LEFT i DESTINATION_RIGHT. Ponieważ jednak niektóre manewry podobne, możesz przypisać więcej niż jeden manewr do jednej ikony. Dla: TURN_LEFT i ON_RAMP_LEFT mogą być przypisane do ikony skrętu w lewo.

Niektóre manewry zawierają dodatkową etykietę clockwise lub counterclockwise, który pakiet SDK określa na podstawie ruchu w kraju. Na przykład w polu w których kierowcy jeżdżą po lewej stronie drogi, rondo lub zawróć w kierunku zgodnym z ruchem wskazówek zegara, a na prawo zgodnie z ruchem wskazówek zegara. Pakiet Navigation SDK wykrywa czy manewr następuje w ruchu po lewej czy prawej stronie i generuje w odpowiedni sposób. Z tego powodu ikona manewru może się różnić w prawo i w lewo.

Rozwiń, aby zobaczyć przykładowe ikony dla różnych manewrów

Ikona przykładowej Makiety TurnByTurn
DEPART
UNKNOWN
STRAIGHT
ON_RAMP_UNSPECIFIED
OFF_RAMP_UNSPECIFIED
NAME_CHANGE
TURN_RIGHT
ON_RAMP_RIGHT
TURN_LEFT
ON_RAMP_LEFT
TURN_SLIGHT_RIGHT
ON_RAMP_SLIGHT_RIGHT
OFF_RAMP_SLIGHT_RIGHT
TURN_SLIGHT_LEFT
ON_RAMP_SLIGHT_LEFT
OFF_RAMP_SLIGHT_LEFT
TURN_SHARP_RIGHT
ON_RAMP_SHARP_RIGHT
OFF_RAMP_SHARP_RIGHT
TURN_SHARP_LEFT
ON_RAMP_SHARP_LEFT
OFF_RAMP_SHARP_LEFT
TURN_U_TURN_COUNTERCLOCKWISE
ON_RAMP_U_TURN_COUNTERCLOCKWISE
OFF_RAMP_U_TURN_COUNTERCLOCKWISE
TURN_U_TURN_CLOCKWISE
ON_RAMP_U_TURN_CLOCKWISE
OFF_RAMP_U_TURN_CLOCKWISE
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_RIGHT_CLOCKWISE
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
ROUNDABOUT_STRAIGHT_CLOCKWISE
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_LEFT_CLOCKWISE
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
ROUNDABOUT_U_TURN_CLOCKWISE
ROUNDABOUT_COUNTERCLOCKWISE
ROUNDABOUT_CLOCKWISE
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
ROUNDABOUT_EXIT_CLOCKWISE
MERGE_RIGHT
OFF_RAMP_RIGHT
MERGE_LEFT
OFF_RAMP_LEFT
FORK_RIGHT
TURN_KEEP_RIGHT
ON_RAMP_KEEP_RIGHT
OFF_RAMP_KEEP_RIGHT
FORK_LEFT
TURN_KEEP_LEFT
ON_RAMP_KEEP_LEFT
OFF_RAMP_KEEP_LEFT
MERGE_UNSPECIFIED
DESTINATION
DESTINATION_RIGHT
DESTINATION_LEFT
FERRY_BOAT
FERRY_TRAIN

Użyj wygenerowanych ikon

Krótka lista wygenerowanych ikon dostępnych przez funkcję Nawigacja.
SDK.

Aby ułatwić korzystanie z Androida Auto, Pakiet Navigation SDK obsługuje generowanie manewrów i pasów ikon wskazówek. Te ikony są zgodne ze wskazówkami dotyczącymi rozmiaru obrazu dostępnymi w Androidzie Auto Biblioteka aplikacji samochodowych, która zaleca kierowanie na ramkę ograniczającą o wymiarach 500 x 74 dp. Zobacz setsLaneImage oraz CarIcon w dokumentacji Androida.

Przykład generowania ikon

NavigationUpdatesOptions options =
  NavigationUpdatesOptions.builder()
             .setNumNextStepsToPreview(numNextStepsToPreview)
             .setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
             .setDisplayMetrics(getResources().getDisplayMetrics())
             .build();
boolean isRegistered =
          navigator.registerServiceForNavUpdates(
              getPackageName(),
              NavInfoReceivingService.class.getName(),
              options);

Po włączeniu generowania ikon obiekt TurnbyTurn StepInfo zacznie wypełniać pole pola maneuverBitmap i lanesBitmap z ikonami.

Co dalej?