Plik danych zakręt po zakręcie dostarcza informacji tylko do nawigacji na urządzeniach, które nie są przeznaczone do nawigacji opartej na mapie. Zapewnia on potrzebne elementy na kolejne manewry:
- ikony (w lewo, w prawo, z obracaniem)
- numery do skrętu na rondach
- nazwy dróg
- szacowanych odległości i czasu do następnego etapu nawigacji lub miejsca docelowego,
Korzystając z kart zakręt po zakręcie, możesz tworzyć obszary, w których interfejs użytkownika z pakietu Nawigacja SDK nie jest odpowiedni, np. w przypadku Androida Auto lub małych ekranów, gdzie nie jest dostępny pełny stos Androida. Na przykład można jej użyć w przypadku osób poruszających się pojazdami dwukołowymi, gdzie wyświetlane są wskazówki wyłącznie z nawigacji, dzięki którym szybciej i bardziej pewniej dojdą oni do celu bez rozpraszania uwagi.
Aby korzystać z pakietu SDK, utwórz usługę i zarejestruj ją w pakiecie Nawigacji SDK na Androida, aby 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ę nawigacyjną, która otrzymuje informacje nawigacyjne z pakietu SDK i przekazuje stan nawigacji na urządzenie odbierające.
Przegląd
W tej sekcji znajdziesz informacje o dodawaniu biblioteki TurnByTurn do projektów i podsumowaniu ogólnego procesu tworzenia funkcji zakręt po zakręcie.
Dodaj bibliotekę TurnByTurn do projektu za pomocą narzędzia Maven (zalecane)
Aby korzystać z samodzielnej wersji biblioteki TurnByTurn, wykonaj te czynności:
Skonfiguruj środowisko, aby uzyskać dostęp do repozytorium Maven hosta zgodnie z opisem w sekcji Pierwsze kroki z pakietem Driver SDK w dokumentacji podróży i zamówień.
Dodaj tę zależność do konfiguracji Maven lub Gradle:
Maven
<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>google_turnbyturn</artifactId> <version>1.0.0</version> </dependency> </dependencies>
Gradle
dependencies { ... implementation 'com.google.android.maps:google_turnbyturn:1.0.0' }
Dodaj bibliotekę TurnByTurn do projektu za pomocą pobranego pliku JAR (wersja alternatywna)
Biblioteka TurnByTurn jest dostępna jako plik JAR w tym folderze SDK. Jeśli nie masz dostępu, skontaktuj się z przedstawicielem.
- Pobierz i rozpakuj plik
google_turnbyturn_*.jar
. - Skopiuj pobrany plik JAR do katalogu
app/libs
projektu. Dodaj do
build.gradle
ten kod, aby umieścić w kompilacji plik JAR.dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
Korzystanie z biblioteki TurnByTurn
Oto ogólny opis czynności, które należy wykonać, aby włączyć tę funkcję. Sekcje poniżej zawierają szczegółowe informacje o każdym kroku.
Utwórz usługę, aby otrzymywać aktualizacje dotyczące nawigacji.
Zobacz przykład panelu nawigacyjnego z najważniejszymi elementami.
Tworzenie usługi do odbierania aktualizacji nawigacji {#service}
Pakiet SDK nawigacji wiąże się z usługą TurnByTurn i wysyła do niej aktualizacje nawigacji przez Android Messengera. Na potrzeby tych aktualizacji możesz utworzyć nową usługę nawigacyjną lub użyć istniejącej.
Zaletą korzystania z usługi do odbierania aktualizacji nawigacji jest to, że może ona działać w ramach osobnego procesu w tle.
Usługa w poniższym przykładzie otrzymuje informacje nawigacyjne i wykorzystuje TurnByTurnManager
do konwersji 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ć przy użyciu pola Message.what klasy Message
, gdzie jest ustawiona wartość TurnByTurnManager.MSG_NAV_INFO
.
Rejestrowanie usługi na potrzeby aktualizacji nawigacji {#register}
Poniższe fragmenty kodu rejestrują usługę nawigacyjną.
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
uruchamianie i zatrzymywanie usługi,
Usługa nawigacyjna jest aktywna, dopóki pakiet SDK nawigacji jest z nią powiązany. Możesz ręcznie wywoływać metody startService()
i stopService()
, aby kontrolować cykl życia usługi nawigacyjnej, ale gdy zarejestrujesz usługę za pomocą pakietu SDK nawigacji, zostanie ona uruchomiona automatycznie i zatrzyma się dopiero wtedy, gdy ją wyrejestrujesz. W zależności od tego, jak skonfigurujesz aplikację, możesz rozważyć uruchomienie usługi na pierwszym planie. Opisaliśmy to w omówieniu usług dokumentacji Androida.
Wyrejestrowanie usługi
Aby przestać otrzymywać aktualizacje dotyczące nawigacji, wyrejestruj usługę z pakietu SDK nawigacji.
navigator.unregisterServiceForNavUpdates();
Stany nawigacji {#states}
Użyj narzędzia NavInfo.getNavState()
, aby pobrać bieżący stan nawigacji, który jest jednym z tych:
Wyjście – stan
ENROUTE
oznacza, że nawigacja z przewodnikiem jest obecnie aktywna, a użytkownik znajduje się na podanej trasie. Informacje o kolejnych krokach są dostępne.Zmiana trasy –
REROUTING
oznacza, że trwa nawigacja, ale nawigacja szuka nowej trasy. Nie można wykonać kolejnego kroku, ponieważ nie została jeszcze wyznaczana nowa trasa. W przykładowej aplikacji na ekranie z informacjami nawigacyjnymi pojawi się komunikat „Rerouting...”. Po znalezieniu trasy wysyłany jest komunikatNavInfo
o stanieENROUTE
.Zatrzymane –
STOPPED
oznacza, że nawigacja się zakończyła. Na przykład nawigacja zatrzymuje się, gdy użytkownik zamknie nawigację w aplikacji. W przykładowej aplikacji stanSTOPPED
czyści wyświetlane informacje o nawigacji, aby zapobiec wyświetlaniu kolejnych instrukcji kroku.
Zapełnianie pola
Po skonfigurowaniu usługi zakręt po zakręcie w tej sekcji omówimy elementy wizualne i tekstowe, których możesz użyć do wypełniania kart ze wskazówkami w przypadku informacji zakręt po zakręcie.
Pola informacji na karcie nawigacyjnej
Gdy kierowca otworzy nawigację z przewodnikiem, u góry pojawi się karta nawigacyjna zawierająca datę nawigacji wypełnioną z pakietu SDK nawigacji. Powiązany obraz przedstawia przykład tych niezbędnych elementów nawigacyjnych.
Ta tabela zawiera pola informacji nawigacyjnych i miejsce, w którym je znajdziesz.
Pola dla każdego 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 celu |
Odległość do następnego kroku | |
Pola asystentów pasów ruchu |
Asystent pasa ruchu
Pakiet SDK nawigacji reprezentuje pasy na karcie zakrętów w nawigacji jako obiekty danych Lane i LaneDirection. Obiekt Lane
reprezentuje konkretny pas podczas nawigacji i zawiera listę obiektów LaneDirection
opisujących wszystkie skręty, jakie można wykonać na tym pasie.
Zalecany kierunek, w którym kierowca powinien poruszać się na tym pasie, jest oznaczony w polu isRecommended.
Przykład informacji o pasie ruchu
Poniższy fragment kodu przedstawia dane dotyczące wyświetlanych pasów ruchu.
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
Utwórz ikony manewrów
Wyliczenie Maneuver
określa wszystkie możliwe manewry, które mogą wystąpić podczas nawigacji, a metodę StepInfo.getManeuver()
możesz określić, aby wykonać ruch w danym kroku.
Musisz utworzyć ikony manewrów i powiązać je z odpowiednimi czynnościami.
W przypadku niektórych manewrów możesz skonfigurować mapowanie 1:1 na ikonę, np. DESTINATION_LEFT
i DESTINATION_RIGHT
. Ponieważ jednak niektóre manewry są podobne, możesz przyporządkować więcej niż jeden ruch na jedną ikonę. Na przykład TURN_LEFT
i ON_RAMP_LEFT
mogą być zmapowane na ikonę skrętu w lewo.
Niektóre manewry zawierają dodatkową etykietę clockwise
lub counterclockwise
, którą pakiet SDK określa w zależności od strony, od której zależy kraj. Na przykład w krajach, w których kierowca porusza się po lewej stronie drogi, kierowcy poruszają się
rondem lub zakręć w kierunku zgodnym z ruchem wskazówek zegara, a kierowcy po prawej stronie drogi – zgodnie z tym ruchem. Pakiet Navigation SDK wykrywa, czy ruch ma miejsce przy ruchu po lewej czy prawej stronie, i podejmuje właściwy ruch. W związku z tym ikona manewru może być inna w przypadku przesuwania w prawo i w lewo.
Rozwiń, aby zobaczyć przykładowe ikony różnych czynności
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żyj wygenerowanych ikon
Aby ułatwić korzystanie z Androida Auto, pakiet SDK nawigacji obsługuje generowanie ikon manewru i wskazówki pasa ruchu. Te ikony pasują do wskazówek dotyczących rozmiaru obrazów w bibliotece aplikacji Android Auto, która zaleca kierowanie na ramkę ograniczającą o wymiarach 500 x 74 dp. Szczegółowe informacje znajdziesz w sekcjach setsLaneImage i CarIcon w dokumentacji Androida.
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łnia pola maneuverBitmap i lanesBitmap ikonami.
Co dalej?
- W przypadku aplikacji na Androida Auto: