Pakiet SDK nawigacji – tryb bez interfejsu graficznego

Wprowadzenie

Pakiet Navigation SDK (Nav SDK) zapewnia 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ć lokalizację 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, a jednocześnie korzystać ze wszystkich funkcji tego pakietu w zakresie śledzenia lokalizacji, subskrypcji zdarzeń i wywołań zwrotnych. Dane zbierane przez pakiet Nav SDK w trybie bez interfejsu graficznego mogą być używane do ulepszania funkcji śledzenia pojazdów i dokładniejszego określania szacowanego czasu przyjazdu, co ostatecznie zwiększa przejrzystość i wydajność.

Pakiet SDK do nawigacji 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ż wykorzystują sieć dróg Google do przyciągania lokalizacji 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 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 (AndroidiOS) znajdziesz instrukcje, jak zaimplementować ten pakiet z włączonymi wskazówkami dojazdu krok po kroku.

Na Androidzie renderowanie mapy z nawigacją zakręt po zakręcie 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 nawigacji krok po kroku z kodem pakietu SDK nawigacji bez interfejsu 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 komponentem 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 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 nawigacja krok po kroku jest wyłączona.

iOS

W przypadku iOS tryb bez interfejsu 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 tylko zilustrować efekt ukrycia widoku mapy:

alt_text alt_text
Aktywna nawigacja uruchomiona na

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.