Pliki danych z informacjami krok po kroku zawierają informacje nawigacyjne przeznaczone do urządzeń, które nie są przeznaczone do nawigacji na mapie. Umożliwia wyświetlanie nadchodzących manewrów z uwzględnieniem podanych przez Ciebie elementów:
- ikony (skręt w lewo, w prawo, zawracanie)
- numery na rondzie
- nazwy dróg,
- szacowane odległości i czas do następnego etapu nawigacji lub docelowego miejsca docelowego;
Możesz używać danych wskazówek dojazdu, aby tworzyć funkcje, w których pełny interfejs pakietu SDK nawigacji nie jest odpowiedni, np. w przypadku Androida Auto lub małych ekranów, na których nie jest dostępny pełny pakiet Androida. Możesz na przykład wyświetlać wskazówki nawigacyjne tylko dla kierowców pojazdów dwukołowych, aby pomagać im w szybszym i bardziej pewnym docieraniu do celu przy minimalnych rozpraszających czynnikach.
Aby korzystać z pakietu SDK, utwórz usługę i zarejestruj ją w pakiecie Navigation SDK na Androida, aby mogła otrzymywać nowe informacje nawigacyjne w czasie rzeczywistym (około raz na sekundę podczas nawigacji).
Z tego dokumentu dowiesz się, jak utworzyć i zarejestrować usługę nawigacji, która otrzymuje informacje nawigacyjne z pakietu SDK i przekazuje stan nawigacji do urządzenia odbiorczego.
Omówienie
W tej sekcji omówiono ogólny proces włączania funkcji wskazówek.
Korzystanie z funkcji szczegółowej nawigacji
Oto ogólne instrukcje włączania funkcji wskazówek dojazdu. W następnych sekcjach znajdziesz szczegółowe informacje o każdym kroku.
Tworzenie usługi do otrzymywania aktualizacji nawigacji
Pakiet SDK do nawigacji łączy się z usługą TurnByTurn i wysyła do niej informacje o nawigacji za pomocą Androida Messengera. Możesz utworzyć nową usługę nawigacji na potrzeby tych aktualizacji lub użyć istniejącej.
Korzyścią z korzystania z usługi do otrzymywania aktualizacji nawigacji jest to, że usługa może działać w ramach osobnego procesu w tle.
W tym przykładzie usługa otrzymuje informacje nawigacyjne i korzysta z elementu TurnByTurnManager
, aby przekonwertować dane na 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
Komunikaty NavInfo
można zidentyfikować za pomocą pola Message.what klasy Message
, które ma wartość TurnByTurnManager.MSG_NAV_INFO
.
Rejestrowanie usługi w celu otrzymywania 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 do nawigacji jest z nią powiązany. Aby kontrolować cykl życia usługi nawigacyjnej, możesz ręcznie wywoływać metody startService()
i stopService()
, ale gdy zarejestrujesz usługę w Navigation SDK, uruchamia się ona automatycznie i zatrzymuje się dopiero po jej wyrejestrowaniu. W zależności od konfiguracji aplikacji możesz rozważyć uruchomienie usługi na pierwszym planie, o której mowa w omówieniu usług w dokumentacji na temat Androida.
Wyrejestrowywanie usługi
Aby przestać otrzymywać aktualizacje nawigacji, zarejestruj usługę w pakiecie SDK nawigacji.
navigator.unregisterServiceForNavUpdates();
Stany nawigacji
Użyj NavInfo.getNavState()
, aby uzyskać bieżący stan nawigacji, który jest jednym z tych:
W drodze – stan
ENROUTE
oznacza, że nawigacja przewodnikiem jest obecnie aktywna, a użytkownik znajduje się na wskazanej trasie. Informacje o kroku, który ma być wykonany w ramach bieżącego manewru, są dostępne.Zmiana trasy –
REROUTING
oznacza, że nawigacja jest w toku, ale nawigator szuka nowej trasy. Następny krok manewru jest niedostępny, ponieważ nie ma jeszcze nowej trasy. W przykładowej aplikacji na wyświetlaczu informacji nawigacyjnych pojawia się komunikat „Przekierowywanie…”. Po znalezieniu trasy wysyłana jest wiadomośćNavInfo
z stanemENROUTE
.Stopped (Zatrzymano)
STOPPED
oznacza, że nawigacja została zakończona. Na przykład nawigacja przestaje działać, gdy użytkownik zamknie nawigację w aplikacji. W próbnej aplikacji stanSTOPPED
powoduje wyczyszczenie informacji nawigacyjnych, aby nie wyświetlały się instrukcje dotyczące poprzednich kroków.
Wypełnianie wyświetlacza pliku danych
Po skonfigurowaniu usługi wskazówek szczegółowych w tej sekcji znajdziesz informacje o elementach wizualnych i tekstowych, których możesz używać do wypełniania kart wskazówek w plikach danych z usługą wskazówek szczegółowych.
Pola informacji karty nawigacyjnej
Gdy użytkownik wejdzie w tryb nawigacji wspomaganej, u góry pojawi się karta nawigacji zawierająca dane nawigacyjne wypełnione z pakietu SDK nawigacji. Powiązany obraz pokazuje przykład tych podstawowych elementów nawigacji.
Ta tabela zawiera pola z informacjami nawigacyjnymi i miejsca, w których je znajdziesz.
Pola w każdym 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 miejsca docelowego |
Odległość do następnego kroku | |
Pola wskazówek dotyczących pasa ruchu |
Asystent pasa ruchu
Pakiet SDK Nawigacji reprezentuje pasy na karcie skrętu w nawigacji jako obiekty danych Lane i LaneDirection. Obiekt Lane
reprezentuje określony pas podczas nawigacji i zawiera listę obiektów LaneDirection
, które opisują wszystkie zakręty, które można wykonać na tym pasie.
Pole isRecommended wskazuje zalecany kierunek jazdy na pasie.
Przykład asystenta pasa ruchu
Poniższy fragment kodu przedstawia sposób wyświetlania danych dotyczących pasów.
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
Tworzenie ikon manewrów
Enum Maneuver
definiuje wszystkie możliwe manewry, które mogą wystąpić podczas nawigacji. Manewr dla danego kroku możesz uzyskać z metody StepInfo.getManeuver()
.
Musisz utworzyć ikony manewrów i sparować je z powiązanymi manewrami.
W przypadku niektórych manewrów możesz skonfigurować bezpośrednie mapowanie na ikonę, taką jak DESTINATION_LEFT
i DESTINATION_RIGHT
. Ponieważ jednak niektóre manewry są podobne, możesz przypisać więcej niż jeden 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 ruch odbywa się po lewej stronie drogi, kierowcy skręcają w rondzie lub wykonują manewr cofania zgodnie z kierunkiem ruchu wskazówek zegara, podczas gdy w krajach, w których ruch odbywa się po prawej stronie drogi, kierują się zgodnie z kierunkiem wskazówek zegara. Pakiet SDK nawigacji wykrywa, czy manewr odbywa się przy 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 odbywa się zgodnie z kierunkiem ruchu wskazówek zegara, czy przeciwnie do niego.
Rozwiń, aby zobaczyć przykłady ikon różnych manewrów
Przykładowa ikona | Manewry w ramach nawigacji szczegółowej |
---|---|
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
Aby ułatwić korzystanie z Androida Auto, pakiet Navigation SDK obsługuje generowanie ikon manewrów i kierowania na pas. Ikony te są zgodne ze wskazówkami dotyczącymi rozmiaru obrazu w bibliotece aplikacji samochodowych Androida Auto, która zaleca ustawienie pola ograniczającego o wymiarach 500 x 74 dp. Szczegółowe informacje znajdziesz w dokumentacji referencyjnej Androida dotyczącej setsLaneImage i CarIcon.
Przykład generowania ikony
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: