Włącz szczegółowy plik danych

Plik danych ze szczegółowymi wskazówkami dojazdu dostarcza informacje dotyczące nawigacji na urządzenia, które nie są przeznaczone do nawigacji na podstawie mapy. Zawiera informacje o nadchodzących manewrach z elementami, które podajesz:

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

Możesz używać kanału ze szczegółowymi wskazówkami dojazdu, aby tworzyć interfejsy, w których pełny interfejs Navigation SDK nie jest odpowiedni, np. w przypadku Androida Auto lub małych ekranów, na których pełny stos Androida nie jest dostępny. Możesz na przykład użyć tego rozwiązania w przypadku kierowców pojazdów dwukołowych, aby wyświetlać im tylko wskazówki nawigacyjne, które pomogą 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 o nawigacji 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 otrzymuje informacje o nawigacji z pakietu SDK i udostępnia stan nawigacji urządzeniu odbiorczemu.

Przegląd

W tej sekcji znajdziesz ogólne podsumowanie procesu włączania funkcji szczegółowych wskazówek dojazdu.

Korzystanie z funkcji nawigacji szczegółowej

Oto ogólne instrukcje włączania funkcji szczegółowych wskazówek dojazdu. W sekcjach poniżej znajdziesz szczegółowe informacje o każdym kroku.

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

  2. Zarejestruj usługę.

  3. Poznaj stany nawigacji.

Tworzenie usługi do otrzymywania aktualizacji nawigacji

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

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

Usługa w poniższym przykładzie otrzymuje informacje o nawigacji i używa TurnByTurnManager do przekonwertowania 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ć za pomocą pola Message.what klasy Message, które jest ustawione 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, dopóki pakiet SDK Navigation jest z nią powiązany. Możesz ręcznie wywołać metody startService() i stopService(), aby kontrolować cykl życia usługi nawigacji, ale gdy zarejestrujesz usługę w pakiecie Navigation SDK, uruchomi się ona automatycznie i zatrzyma się dopiero po wyrejestrowaniu. W zależności od tego, jak skonfigurujesz aplikację, możesz rozważyć uruchomienie usługi na pierwszym planie, opisanej w dokumentacji Androida Omówienie usług.

Wyrejestrowywanie usługi

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

navigator.unregisterServiceForNavUpdates();

Informacje o stanach nawigacji

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

  • Enroute – stan ENROUTE oznacza, że nawigacja ze wskazówkami jest aktywna, a użytkownik znajduje się na podanej trasie. Dostępne są informacje o bieżącym i nadchodzącym kroku manewru.

  • Rerouting (Zmieniam trasę) – REROUTING oznacza, że nawigacja jest w toku, ale nawigator szuka nowej trasy. Krok dotyczący nadchodzącego manewru jest niedostępny, ponieważ nie ma jeszcze nowej trasy. W przykładowej aplikacji na wyświetlaczu informacji nawigacyjnych pojawia się komunikat „Przeliczam trasę…”. Po znalezieniu trasy wysyłany jest komunikat NavInfo ze stanem ENROUTE.

  • Zatrzymano – STOPPED oznacza, że nawigacja została zakończona. Na przykład nawigacja zatrzymuje się, gdy użytkownik wyjdzie z nawigacji w aplikacji. W przykładowej aplikacji stan STOPPED czyści wyświetlane informacje o nawigacji, aby zapobiec wyświetlaniu nieaktualnych instrukcji.

Wypełnianie wyświetlacza kanału

Po skonfigurowaniu usługi szczegółowych wskazówek dojazdu możesz używać elementów wizualnych i elementów tekstowych opisanych w tej sekcji do wypełniania kart wskazówek w kanale szczegółowych wskazówek dojazdu.

Ekran telefonu komórkowego, na którym widać, że za 30 metrów należy skręcić w lewo w W Ahwanee Ave. Na dole ekranu wyświetla się czas pozostały do dotarcia do celu (46 minut) i pozostała odległość (63 kilometry).

Gdy użytkownik włączy nawigację z podpowiedziami, u góry pojawi się karta nawigacji zawierająca dane nawigacyjne z pakietu Navigation SDK. Powiązany obraz pokazuje przykład tych podstawowych elementów nawigacyjnych.

Ta tabela zawiera pola z informacjami o nawigacji i miejsca, w których można je znaleźć.

Pola dla każdego etapu 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 miejsca docelowego
odległość do następnego kroku,
Pola asystenta pasa ruchu

Asystent pasa ruchu

Pakiet Navigation SDK reprezentuje pasy ruchu na karcie skrętu 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.

Przykładowa konfiguracja asystenta pasa ruchu.

Zalecany kierunek, w którym użytkownik powinien się poruszać na pasie, 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

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. Niektóre manewry są jednak podobne, więc możesz przypisać więcej niż 1 manewr do jednej ikony. 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 ruchu w danym kraju. Na przykład w krajach, w których obowiązuje ruch lewostronny, kierowcy poruszają się po rondzie lub zawracają zgodnie z ruchem wskazówek zegara, natomiast w krajach z ruchem prawostronnym – przeciwnie do ruchu wskazówek zegara. Pakiet Navigation SDK wykrywa, czy manewr występuje w ruchu lewo- 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 zgodnie z ruchem wskazówek zegara czy przeciwnie do niego.

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

Ikona próbki Manewry nawigacji zakręt po zakręcie
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

Niewielka lista wygenerowanych ikon udostępnianych przez pakiet SDK nawigacji.

Aby ułatwić korzystanie z Android Auto, pakiet Navigation SDK obsługuje generowanie ikon wskazówek dotyczących manewrów i pasów ruchu. Te ikony są zgodne ze wskazówkami dotyczącymi rozmiaru obrazu w bibliotece aplikacji samochodowych na Androida Auto, która zaleca kierowanie na ramkę ograniczającą o wymiarach 500 x 74 dp. Szczegółowe informacje znajdziesz w dokumentacji referencyjnej Androida dotyczącej 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);

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

Co dalej?