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.
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
ENROUTEoznacza, ż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ę) –
REROUTINGoznacza, ż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 komunikatNavInfoze stanemENROUTE.Zatrzymano –
STOPPEDoznacza, że nawigacja została zakończona. Na przykład nawigacja zatrzymuje się, gdy użytkownik wyjdzie z nawigacji w aplikacji. W przykładowej aplikacji stanSTOPPEDczyś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.
Pola informacyjne karty nawigacji
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.
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 |
|---|---|
![]() |
DEPARTUNKNOWN |
![]() |
STRAIGHTON_RAMP_UNSPECIFIEDOFF_RAMP_UNSPECIFIEDNAME_CHANGE
|
![]() |
TURN_RIGHTON_RAMP_RIGHT
|
![]() |
TURN_LEFTON_RAMP_LEFT
|
![]() |
TURN_SLIGHT_RIGHTON_RAMP_SLIGHT_RIGHTOFF_RAMP_SLIGHT_RIGHT
|
![]() |
TURN_SLIGHT_LEFTON_RAMP_SLIGHT_LEFTOFF_RAMP_SLIGHT_LEFT
|
![]() |
TURN_SHARP_RIGHTON_RAMP_SHARP_RIGHTOFF_RAMP_SHARP_RIGHT
|
![]() |
TURN_SHARP_LEFTON_RAMP_SHARP_LEFTOFF_RAMP_SHARP_LEFT
|
![]() |
TURN_U_TURN_COUNTERCLOCKWISEON_RAMP_U_TURN_COUNTERCLOCKWISEOFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
![]() |
TURN_U_TURN_CLOCKWISEON_RAMP_U_TURN_CLOCKWISEOFF_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_RIGHTOFF_RAMP_RIGHT
|
![]() |
MERGE_LEFTOFF_RAMP_LEFT
|
![]() |
FORK_RIGHTTURN_KEEP_RIGHTON_RAMP_KEEP_RIGHTOFF_RAMP_KEEP_RIGHT
|
![]() |
FORK_LEFTTURN_KEEP_LEFTON_RAMP_KEEP_LEFTOFF_RAMP_KEEP_LEFT
|
![]() |
MERGE_UNSPECIFIED
|
![]() |
DESTINATION
|
![]() |
DESTINATION_RIGHT
|
![]() |
DESTINATION_LEFT
|
![]() |
FERRY_BOAT
|
![]() |
FERRY_TRAIN
|
Używanie wygenerowanych ikon
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?
- W przypadku aplikacji na Androida Auto:







































