Pakiet SDK nawigacji – tryb bez interfejsu graficznego

Wprowadzenie

Pakiet Navigation SDK (Nav SDK) zapewnia najlepszą w swojej klasie funkcję szczegółowej nawigacji, 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 szczegółowej nawigacji, ale nadal chcą śledzić lokalizacje pojazdów i nasłuchiwać zdarzeń związanych z trasą, którą się poruszają. Przykładem mogą być kierowcy ciężarówek, zwłaszcza jeśli przewożą materiały niebezpieczne. Inne firmy, które dostarczają towary za pomocą różnych środków transportu, np. pieszo na krótkich dystansach, również mogą nie potrzebować szczegółowej nawigacji, co pozwoli oszczędzać baterię urządzenia.

Zakres

W tym dokumencie opisujemy, 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 przechwytywane z pakietu Nav SDK w trybie bez interfejsu graficznego mogą być wykorzystywane do poprawy możliwości śledzenia pojazdów i dokładniejszego określania szacowanego czasu przybycia, co ostatecznie prowadzi do większej przejrzystości i wydajności.

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

  • uzyskiwanie lokalizacji przyciągniętych do drogi z aplikacji, która ją uruchamia. Lokalizacje przyciągnięte do drogi są dokładniejsze niż lokalizacje z usługi FusedLocationProvider (FLP) na Androidzie, ponieważ wykorzystują sieć dróg Google do przyciągania lokalizacji do najbliższego odcinka drogi, co sprawia, że szacowany czas przybycia i inne informacje z FLP są znacznie dokładniejsze.
  • szczegółową nawigację, która umożliwia kierowcom efektywne dotarcie z punktu A do punktu B z uwzględnieniem ruchu w czasie rzeczywistym i innych ograniczeń trasy.
  • wywoływanie zdarzeń na podstawie postępu na trasie, 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 szczegółowej nawigacji. Dlatego dokumentacja pakietu Nav SDK (Android i iOS) zawiera instrukcje dotyczące wdrażania pakietu Nav SDK z włączoną szczegółową nawigacją.

Na Androidzie renderowanie mapy szczegółowej nawigacji 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 szczegółowej nawigacji.

W następnej sekcji porównamy domyślny kod pakietu Nav SDK z włączoną szczegółową nawigacją z kodem pakietu Nav SDK bez interfejsu graficznego na Androidzie i iOS, wskazując wymagane zmiany.

Rozwiązanie

Android

Na Androidzie jest to kod Java, który jest częścią przykładowej aplikacji Nav SDK.

@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 interfejsu nawigacji, a w tym przypadku zamiast elementu NavigationView tworzony jest element SupportNavigationFragment.

Aby pakiet Nav SDK uruchamiał się w trybie bez interfejsu graficznego, 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, która będzie określać, czy należy używać trybu bez interfejsu graficznego, np.:

Boolean mHeadless = true;

Możesz jej 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 komponentem interfejsu (np. przełącznikiem), który będzie odpowiednio włączać lub wyłączać tryb bez interfejsu graficznego.

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

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

iOS

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

mapView.isHidden = true


Na 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
  }()

Zobacz, jak to wygląda – ekran będzie zależeć od sposobu implementacji interfejsu, a zrzut ekranu służy tylko do zilustrowania efektu ukrywania elementu mapView:

alt_text alt_text
Aktywna nawigacja działająca w

przykładowej aplikacji na iOS

Ta sama aplikacja w trybie bez interfejsu graficznego

Uwagi o wdrażaniu

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

Podsumowanie

Ten dokument pokazuje, 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 dostosowanie interfejsu dla kierowców, aby uniknąć rozpraszania 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 Zmienianie powiadomień szczegółowej nawigacji w pakiecie Nav SDK.