Pakiet Headless Navigation SDK

Wprowadzenie

Pakiet Navigation SDK (Nav SDK) udostępnia najlepszą w swojej klasie funkcję nawigacji krok po kroku, która może być bardzo przydatna dla klientów i kierowców, zwłaszcza nowych lub nieznających danego regionu. Istnieją jednak konkretne przypadki użycia, w których firmy nie chcą odwracać uwagi kierowców od drogi za pomocą interfejsu nawigacji krok po kroku, ale nadal chcą śledzić lokalizacje pojazdów i nasłuchiwać zdarzeń związanych z trasą, którą pokonują. Przykładem są kierowcy ciężarówek, zwłaszcza jeśli przewożą materiały niebezpieczne. Inne firmy, które realizują dostawy za pomocą różnych środków transportu, np. pieszo na krótkich dystansach, mogą nie potrzebować włączonej nawigacji krok po kroku, co pozwoli oszczędzać baterię urządzenia.

Zakres

Z tego dokumentu dowiesz się, jak firmy mogą ukryć mapę nawigacji (widok) z pakietu Nav SDK i nadal korzystać ze wszystkich funkcji tego pakietu w zakresie śledzenia lokalizacji, subskrypcji zdarzeń i wywołań zwrotnych. Dane rejestrowane przez Nav SDK w trybie bez interfejsu użytkownika mogą być wykorzystywane do zwiększania możliwości śledzenia pojazdów i dokładniejszego określania szacowanego czasu przyjazdu, co ostatecznie prowadzi do większej przejrzystości i wydajności.

Pakiet Navigation SDK to natywna biblioteka na Androida lub iOS, którą dodaje się do aplikacji dla kierowców. W kontekście mobilności odpowiada on za:

  • uzyskiwanie przyciągniętych do drogi lokalizacji z aplikacji, która je generuje; Lokalizacje przyciągane do drogi są dokładniejsze niż te z FusedLocationProvider (FLP) na Androidzie, ponieważ korzystają z sieci dróg Google, aby przyciągać lokalizacje do najbliższego odcinka drogi. Dzięki temu szacowany czas przyjazdu i inne informacje z FLP są znacznie dokładniejsze.
  • Nawigacja krok po kroku, która umożliwia kierowcom efektywne dotarcie z punktu A do punktu B z uwzględnieniem informacji o ruchu w czasie rzeczywistym i innych ograniczeń na trasie.
  • Wywoływanie zdarzeń na podstawie postępu trasy, lokalizacji, prędkości itp. za pomocą detektorów zdarzeń i zarejestrowanych wywołań zwrotnych.

Domyślny interfejs

Gdy klienci wdrażają pakiet Nav SDK, zakłada się, że potrzebują funkcji nawigacji krok po kroku. Dlatego w dokumentacji pakietu Nav SDK (Android i iOS) znajdziesz instrukcje, jak wdrożyć pakiet Nav SDK z włączonymi wskazówkami dojazdu krok po kroku.

Na Androidzie renderowanie mapy ze szczegółowymi wskazówkami dojazdu w aplikacji odbywa się za pomocą elementu SupportNavigationFragment lub NavigationView, a na iOS – za pomocą elementu GMSMapView. Te elementy interfejsu dodają do aplikacji interaktywną mapę i interfejs nawigacji zakręt po zakręcie.

W następnej sekcji porównamy domyślny pakiet SDK nawigacji z włączonym kodem szczegółowej nawigacji z kodem pakietu SDK nawigacji bez interfejsu graficznego zarówno na Androida, jak i na iOS, podkreślając wymagane zmiany.

Rozwiązanie

Android

W przypadku Androida jest to kod Java, który jest częścią przykładowej aplikacji pakietu SDK nawigacji.

@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   // Obtain a reference to the NavigationFragment
   setContentView(R.layout.activity_nav_fragment);
   mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);

Jak widać, widok wskazuje układ, który powinien być używany do rysowania nawigacji. W tym przypadku tworzony jest element SupportNavigationFragment, a nie NavigationView.

Aby pakiet Nav SDK uruchamiał się w trybie bez interfejsu, wystarczy usunąć te 2 instrukcje. Jeśli chcesz przełączać się między trybem bez interfejsu graficznego a trybem z aktywną nawigacją, możesz użyć zmiennej, aby określić, czy tryb bez interfejsu graficznego ma być używany, np.:

Boolean mHeadless = true;

Można go później użyć w ten sposób:

@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

   // Obtain a reference to the NavigationFragment
   if(!mHeadless) {
       setContentView(R.layout.activity_nav_fragment);
       mNavFragment =
               (SupportNavigationFragment)
                       getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
   }

Zmienną mHeadless można połączyć z elementem interfejsu (np. przełącznikiem), który będzie odpowiednio włączać lub wyłączać tryb bez interfejsu.

alt_text alt_text
Pakiet Nav SDK działający z aktywną nawigacją (bez interfejsu) Ta sama aplikacja, ale teraz z pakietem SDK nawigacji działającym w trybie bez interfejsu

Jak widać w przykładzie po prawej stronie, nawigacja w pakiecie Nav SDK działa w tle, ale nawigacja krok po kroku jest wyłączona.

iOS

W przypadku iOS tryb bez interfejsu graficznego można łatwo włączyć, dodając to ustawienie podczas inicjowania MapView:

mapView.isHidden = true


Przykład:

  /// The main map view.
  private lazy var mapView: GMSMapView = {
    let mapView = GMSMapView(frame: .zero)
    mapView.isHidden = true /// Make it headless!
    mapView.isNavigationEnabled = true
    mapView.settings.compassButton = true
    mapView.delegate = self
    return mapView
  }()

Sprawdź, jak to będzie wyglądać – ekran będzie zależeć od sposobu wdrożenia interfejsu, a zrzut ekranu ma jedynie zilustrować efekt ukrycia widoku mapy:

alt_text alt_text
Aktywna nawigacja na urządzeniu

Przykładowa aplikacja na iOS

Ta sama aplikacja w trybie bez interfejsu graficznego

Uwagi o wdrażaniu

Tryb bez ekranu to nic innego jak ukrycie mapy nawigacyjnej na ekranie, więc oszczędza się tylko czas ekranu, co wydłuża czas pracy baterii urządzenia. Jednak pakiet Nav SDK będzie nadal działać, a aktualizacje lokalizacji i wszystkie wywołania zwrotne zdarzeń będą wywoływane normalnie, więc korzystanie z tej konfiguracji nie ma żadnych skutków ubocznych.

Podsumowanie

Z tego dokumentu dowiesz się, jak elastyczny jest pakiet Nav SDK i co możemy osiągnąć w różnych systemach operacyjnych, biorąc pod uwagę ich ograniczenia. Umożliwia też klientom dostosowywanie wrażeń z jazdy, aby uniknąć rozproszenia uwagi i zwiększyć bezpieczeństwo.

Dodatkowe materiały

Jeśli z wyżej wymienionych powodów powiadomienia muszą być wyłączone podczas nawigacji, można to zrobić. Więcej informacji znajdziesz w artykule Modyfikowanie powiadomień o kolejnych krokach w pakiecie Nav SDK.