Włącz szczegółowy plik danych

Plik danych nawigacji zakręt po zakręcie zawiera informacje dotyczące tylko nawigacji, które są przeznaczone dla urządzeń nieobsługujących nawigacji opartej na mapach. Zawiera on informacje o zbliżających się manewrach z elementami dostarczonymi przez Ciebie:

  • ikony (w lewo, w prawo, zawracanie);
  • numery zjazdów na rondach;
  • nazwy dróg;
  • szacowane odległości i czas do następnego etapu nawigacji lub miejsca docelowego.

Pliku danych nawigacji zakręt po zakręcie możesz używać do tworzenia funkcji, w których pełny interfejs pakietu Navigation SDK nie jest odpowiedni, np. w Androidzie Auto lub na małych ekranach, na których nie jest dostępny pełny stos Androida. Możesz na przykład używać go w przypadku kierowców pojazdów dwukołowych, którym możesz wyświetlać wskazówki dotyczące tylko nawigacji, aby pomóc im szybciej i pewniej dotrzeć do celu przy minimalnym rozpraszaniu uwagi.

Aby korzystać z pakietu SDK, musisz utworzyć usługę i zarejestrować ją w pakiecie Navigation SDK na Androida, aby mogła 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ę nawigacji, która będzie otrzymywać informacje nawigacyjne z pakietu SDK i przekazywać stan nawigacji do urządzenia odbierającego.

Przegląd

W tej sekcji znajdziesz podsumowanie ogólnego procesu włączania funkcji nawigacji zakręt po zakręcie.

Korzystanie z funkcji TurnByTurn

Oto ogólne kroki włączania funkcji nawigacji zakręt po zakręcie. W sekcjach poniżej znajdziesz szczegółowe informacje o każdym kroku.

  1. Utwórz usługę do odbierania aktualizacji nawigacji.

  2. Zarejestruj usługę.

  3. Poznaj stany nawigacji.

Tworzenie usługi do odbierania aktualizacji nawigacji

Pakiet Navigation SDK łączy się z Twoją usługą TurnByTurn i wysyła do niej aktualizacje nawigacji za pomocą Android Messenger . Możesz utworzyć nową usługę nawigacji na potrzeby tych aktualizacji lub użyć istniejącej usługi.

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

Usługa w poniższym przykładzie odbiera informacje nawigacyjne i używa klasy TurnByTurnManager, aby przekształcić dane w obiekt NavInfo zawierający 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 identyfikować za pomocą Message.what pola klasy Message, które jest ustawione na wartość TurnByTurnManager.MSG_NAV_INFO.

Rejestrowanie usługi do odbierania 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 tak długo, jak długo pakiet Navigation SDK jest z nią połączony. Aby kontrolować cykl życia usługi nawigacji, możesz ręcznie wywoływać funkcje startService() i stopService(), ale gdy zarejestrujesz usługę w pakiecie Navigation SDK, usługa uruchomi się automatycznie i zatrzyma się dopiero po jej wyrejestrowaniu. W zależności od konfiguracji aplikacji możesz rozważyć uruchomienie usługi na pierwszym planie, która jest opisana w dokumentacji Androida w sekcji Omówienie usług.

Wyrejestrowywanie usługi

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

navigator.unregisterServiceForNavUpdates();

Poznawanie stanów nawigacji

Użyj NavInfo.getNavState(), aby uzyskać bieżący stan nawigacji, który jest jednym z następujących:

  • Enroute – stan ENROUTE oznacza, że nawigacja z przewodnikiem jest aktywna, a użytkownik znajduje się na podanej trasie. Dostępne są informacje o bieżącym zbliżającym się manewrze.

  • ReroutingREROUTING oznacza, że nawigacja jest w toku, ale nawigator szuka nowej trasy. Zbliżający się manewr nie jest dostępny, ponieważ nie ma jeszcze nowej trasy. W przykładowej aplikacji w wyświetlaczu informacji nawigacyjnych pojawia się komunikat „Wyznaczanie nowej trasy...”. Gdy trasa zostanie znaleziona, wysyłana jest wiadomość NavInfo ze stanem ENROUTE.

  • ZatrzymanoSTOPPED oznacza, że nawigacja została zakończona. Nawigacja zatrzymuje się na przykład, gdy użytkownik wyłączy nawigację w aplikacji. W przykładowej aplikacji stan STOPPED czyści wyświetlacz informacji nawigacyjnych, aby zapobiec wyświetlaniu instrukcji dotyczących poprzedniego kroku.

Wypełnianie wyświetlacza pliku danych

Teraz, gdy masz już skonfigurowaną usługę nawigacji zakręt po zakręcie, w tej sekcji omówimy elementy wizualne i tekstowe, których możesz użyć do wypełnienia kart wskazówek w pliku danych nawigacji zakręt po zakręcie.

Ekran telefonu komórkowego z informacją o zbliżającym się skręcie w lewo za 100 stóp w ulicę W Ahwanee Ave. U dołu ekranu widnieje informacja o czasie pozostałym do celu podróży (46 minut) i odległości do pokonania (39 mil).

Gdy użytkownik włączy nawigację z przewodnikiem, u góry pojawi się karta nawigacji zawierająca dane nawigacyjne pobrane z pakietu Navigation SDK. Na powiązanym obrazie widać przykład tych podstawowych elementów nawigacji.

W tej tabeli znajdziesz pola informacji nawigacyjnych i ich lokalizację.

Pola dla każdego etapu nawigacji Pola dla całej podróży
Znajdują się w StepInfo Znajdują się w NavInfo
Pełna nazwa drogi Pozostały czas
Ikona manewru Odległość od miejsca docelowego
Odległość do następnego kroku
Pola asystenta pasa ruchu

Asystent pasa ruchu

Pakiet Navigation SDK reprezentuje pasy ruchu na karcie nawigacji jako obiekty danych Lane i LaneDirection. Obiekt Lane reprezentuje konkretny pas ruchu podczas nawigacji i zawiera listę obiektów LaneDirection, które opisują wszystkie skręty, jakie można wykonać z tego pasa ruchu.

Przykładowa konfiguracja asystenta pasa ruchu.

Zalecany kierunek, w którym użytkownik powinien jechać pasem ruchu, jest oznaczony polem isRecommended.

Przykład asystenta pasa ruchu

Poniższy fragment kodu ilustruje reprezentację danych pasów ruchu wyświetlanych powyżej.

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

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

Tworzenie ikon manewrów

Wyliczenie Maneuver definiuje każdy możliwy manewr, który może wystąpić podczas nawigacji. Manewr dla danego kroku możesz uzyskać za pomocą metody StepInfo.getManeuver().

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

Niektóre manewry zawierają dodatkową etykietę clockwise lub counterclockwise, którą pakiet SDK określa na podstawie strony, po której jeździ się w danym kraju. Na przykład w krajach, w których jeździ się po lewej stronie drogi, kierowcy skręcają na rondzie lub zawracają w kierunku przeciwnym do ruchu wskazówek zegara, a w krajach, w których jeździ się po prawej stronie drogi, w kierunku zgodnym z ruchem wskazówek zegara. Pakiet Navigation SDK wykrywa, czy manewr występuje w ruchu lewostronnym czy prawostronnym, i wyświetla odpowiedni manewr. Dlatego ikona manewru może się różnić w zależności od tego, czy manewr jest wykonywany w kierunku zgodnym czy przeciwnym do ruchu wskazówek zegara.

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

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żywanie wygenerowanych ikon

Krótka lista wygenerowanych ikon dostarczonych przez pakiet SDK Navigation.

Aby ułatwić korzystanie z Androida Auto, pakiet Navigation SDK obsługuje generowanie ikon manewrów i asystenta pasa ruchu. Te ikony są zgodne z wytycznymi dotyczącymi rozmiarów obrazów w bibliotece Android Auto Car App, która zaleca używanie ramki ograniczającej o wymiarach 500 x 74 dp. Więcej informacji znajdziesz w dokumentacji referencyjnej Androida w sekcjach setsLaneImage i CarIcon.

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łni pola maneuverBitmap i lanesBitmap ikonami.

Co dalej?