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.
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
ENROUTEoznacza, ż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.Rerouting –
REROUTINGoznacza, ż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śćNavInfoze stanemENROUTE.Zatrzymano –
STOPPEDoznacza, że nawigacja została zakończona. Nawigacja zatrzymuje się na przykład, gdy użytkownik wyłączy nawigację w aplikacji. W przykładowej aplikacji stanSTOPPEDczyś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.
Pola informacji na karcie nawigacji
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.
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 |
|---|---|
![]() |
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 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?
- W przypadku aplikacji na Androida Auto:







































