Włącz szczegółowy plik danych

Plik danych zakręt po zakręcie dostarcza informacji tylko do nawigacji na urządzeniach, które nie są przeznaczone do nawigacji opartej na mapie. Zapewnia on potrzebne elementy na kolejne manewry:

  • ikony (w lewo, w prawo, z obracaniem)
  • numery do skrętu na rondach
  • nazwy dróg
  • szacowanych odległości i czasu do następnego etapu nawigacji lub miejsca docelowego,

Korzystając z kart zakręt po zakręcie, możesz tworzyć obszary, w których interfejs użytkownika z pakietu Nawigacja SDK nie jest odpowiedni, np. w przypadku Androida Auto lub małych ekranów, gdzie nie jest dostępny pełny stos Androida. Na przykład można jej użyć w przypadku osób poruszających się pojazdami dwukołowymi, gdzie wyświetlane są wskazówki wyłącznie z nawigacji, dzięki którym szybciej i bardziej pewniej dojdą oni do celu bez rozpraszania uwagi.

Aby korzystać z pakietu SDK, utwórz usługę i zarejestruj ją w pakiecie Nawigacji SDK na Androida, aby otrzymywać nowe informacje nawigacyjne w czasie rzeczywistym (mniej więcej raz na sekundę podczas nawigacji).

Z tego dokumentu dowiesz się, jak utworzyć i zarejestrować usługę nawigacyjną, która otrzymuje informacje nawigacyjne z pakietu SDK i przekazuje stan nawigacji na urządzenie odbierające.

Przegląd

W tej sekcji znajdziesz informacje o dodawaniu biblioteki TurnByTurn do projektów i podsumowaniu ogólnego procesu tworzenia funkcji zakręt po zakręcie.

Aby korzystać z samodzielnej wersji biblioteki TurnByTurn, wykonaj te czynności:

  1. Skonfiguruj środowisko, aby uzyskać dostęp do repozytorium Maven hosta zgodnie z opisem w sekcji Pierwsze kroki z pakietem Driver SDK w dokumentacji podróży i zamówień.

  2. Dodaj tę zależność do konfiguracji Maven lub Gradle:

    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 (wersja alternatywna)

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

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

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

Korzystanie z biblioteki TurnByTurn

Oto ogólny opis czynności, które należy wykonać, aby włączyć tę funkcję. Sekcje poniżej zawierają szczegółowe informacje o każdym kroku.

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

  2. Zarejestruj usługę.

  3. Informacje o stanach nawigacji

  4. Zobacz przykład panelu nawigacyjnego z najważniejszymi elementami.

Tworzenie usługi do odbierania aktualizacji nawigacji {#service}

Pakiet SDK nawigacji wiąże się z usługą TurnByTurn i wysyła do niej aktualizacje nawigacji przez Android Messengera. Na potrzeby tych aktualizacji możesz utworzyć nową usługę nawigacyjną lub użyć istniejącej.

Zaletą korzystania z usługi do odbierania aktualizacji nawigacji jest to, że może ona działać w ramach osobnego procesu w tle.

Usługa w poniższym przykładzie otrzymuje informacje nawigacyjne i wykorzystuje TurnByTurnManager do konwersji danych na obiekt NavInfo, 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

Wiadomości NavInfo można zidentyfikować przy użyciu pola Message.what klasy Message, gdzie jest ustawiona wartość TurnByTurnManager.MSG_NAV_INFO.

Rejestrowanie usługi na potrzeby aktualizacji nawigacji {#register}

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

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

uruchamianie i zatrzymywanie usługi,

Usługa nawigacyjna jest aktywna, dopóki pakiet SDK nawigacji jest z nią powiązany. Możesz ręcznie wywoływać metody startService() i stopService(), aby kontrolować cykl życia usługi nawigacyjnej, ale gdy zarejestrujesz usługę za pomocą pakietu SDK nawigacji, zostanie ona uruchomiona automatycznie i zatrzyma się dopiero wtedy, gdy ją wyrejestrujesz. W zależności od tego, jak skonfigurujesz aplikację, możesz rozważyć uruchomienie usługi na pierwszym planie. Opisaliśmy to w omówieniu usług dokumentacji Androida.

Wyrejestrowanie usługi

Aby przestać otrzymywać aktualizacje dotyczące nawigacji, wyrejestruj usługę z pakietu SDK nawigacji.

navigator.unregisterServiceForNavUpdates();

Stany nawigacji {#states}

Użyj narzędzia NavInfo.getNavState(), aby pobrać bieżący stan nawigacji, który jest jednym z tych:

  • Wyjście – stan ENROUTE oznacza, że nawigacja z przewodnikiem jest obecnie aktywna, a użytkownik znajduje się na podanej trasie. Informacje o kolejnych krokach są dostępne.

  • Zmiana trasyREROUTING oznacza, że trwa nawigacja, ale nawigacja szuka nowej trasy. Nie można wykonać kolejnego kroku, ponieważ nie została jeszcze wyznaczana nowa trasa. W przykładowej aplikacji na ekranie z informacjami nawigacyjnymi pojawi się komunikat „Rerouting...”. Po znalezieniu trasy wysyłany jest komunikat NavInfo o stanie ENROUTE.

  • ZatrzymaneSTOPPED oznacza, że nawigacja się zakończyła. Na przykład nawigacja zatrzymuje się, gdy użytkownik zamknie nawigację w aplikacji. W przykładowej aplikacji stan STOPPED czyści wyświetlane informacje o nawigacji, aby zapobiec wyświetlaniu kolejnych instrukcji kroku.

Zapełnianie pola

Po skonfigurowaniu usługi zakręt po zakręcie w tej sekcji omówimy elementy wizualne i tekstowe, których możesz użyć do wypełniania kart ze wskazówkami w przypadku informacji zakręt po zakręcie.

Ekran urządzenia mobilnego, na którym widać najbliższy skręt w lewo za 30 metrów na ulicę W Ahwanee. Czas pozostały do celu u dołu ekranu to 46 minut, a odległość – 41 km.

Gdy kierowca otworzy nawigację z przewodnikiem, u góry pojawi się karta nawigacyjna zawierająca datę nawigacji wypełnioną z pakietu SDK nawigacji. Powiązany obraz przedstawia przykład tych niezbędnych elementów nawigacyjnych.

Ta tabela zawiera pola informacji nawigacyjnych i miejsce, w którym je znajdziesz.

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 asystentów pasów ruchu

Asystent pasa ruchu

Pakiet SDK nawigacji reprezentuje pasy na karcie zakrętów w nawigacji jako obiekty danych Lane i LaneDirection. Obiekt Lane reprezentuje konkretny pas podczas nawigacji i zawiera listę obiektów LaneDirection opisujących wszystkie skręty, jakie można wykonać na tym pasie.

Przykładowa konfiguracja asystenta pasa ruchu.

Zalecany kierunek, w którym kierowca powinien poruszać się na tym pasie, jest oznaczony w polu isRecommended.

Przykład informacji o pasie ruchu

Poniższy fragment kodu przedstawia dane dotyczące wyświetlanych pasów ruchu.

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

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

Utwórz ikony manewrów

Wyliczenie Maneuver określa wszystkie możliwe manewry, które mogą wystąpić podczas nawigacji, a metodę StepInfo.getManeuver() możesz określić, aby wykonać ruch w danym kroku.

Musisz utworzyć ikony manewrów i powiązać je z odpowiednimi czynnościami. W przypadku niektórych manewrów możesz skonfigurować mapowanie 1:1 na ikonę, np. DESTINATION_LEFT i DESTINATION_RIGHT. Ponieważ jednak niektóre manewry są podobne, możesz przyporządkować więcej niż jeden ruch na jedną ikonę. Na przykład TURN_LEFT i ON_RAMP_LEFT mogą być zmapowane na ikonę skrętu w lewo.

Niektóre manewry zawierają dodatkową etykietę clockwise lub counterclockwise, którą pakiet SDK określa w zależności od strony, od której zależy kraj. Na przykład w krajach, w których kierowca porusza się po lewej stronie drogi, kierowcy poruszają się rondem lub zakręć w kierunku zgodnym z ruchem wskazówek zegara, a kierowcy po prawej stronie drogi – zgodnie z tym ruchem. Pakiet Navigation SDK wykrywa, czy ruch ma miejsce przy ruchu po lewej czy prawej stronie, i podejmuje właściwy ruch. W związku z tym ikona manewru może być inna w przypadku przesuwania w prawo i w lewo.

Rozwiń, aby zobaczyć przykładowe ikony różnych czynności

Przykładowa ikona Manewry 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 z pakietu Navigation SDK.

Aby ułatwić korzystanie z Androida Auto, pakiet SDK nawigacji obsługuje generowanie ikon manewru i wskazówki pasa ruchu. Te ikony pasują do wskazówek dotyczących rozmiaru obrazów w bibliotece aplikacji Android Auto, która zaleca kierowanie na ramkę ograniczającą o wymiarach 500 x 74 dp. Szczegółowe informacje znajdziesz w sekcjach setsLaneImage i 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);

Gdy włączysz generowanie ikon, obiekt TurnbyTurn StepInfo wypełnia pola maneuverBitmap i lanesBitmap ikonami.

Co dalej?