Nav SDK – безголовый режим

Введение

Навигационный SDK (Nav SDK) предоставляет лучшую в своем классе функцию пошаговой навигации, которая может быть очень полезна клиентам и водителям, особенно начинающим водителям или водителям, незнакомым с регионом. Однако существуют специфические сценарии использования, когда компании не хотят отвлекать внимание водителей от дороги с помощью интерфейса пошаговой навигации, но при этом хотят отслеживать местоположение транспортных средств и отслеживать события, связанные с маршрутом. Один из примеров — водители грузовиков, особенно если они перевозят опасные материалы. Другие компании, осуществляющие доставку различными способами — например, пешком на короткие расстояния — могут не нуждаться в включенной пошаговой навигации, что позволит сэкономить заряд батареи устройства.

Объем

В этом документе описывается, как компании могут скрыть карту навигации (представление) из Nav SDK и при этом пользоваться всеми функциями Nav SDK, касающимися отслеживания местоположения, подписки на события и обратных вызовов. Данные, полученные из Nav SDK в безголовом режиме, могут быть использованы для улучшения возможностей отслеживания транспортных средств и более точного понимания расчетного времени прибытия, что в конечном итоге приводит к прозрачности и эффективности.

Навигационный SDK — это нативная библиотека для Android/iOS, которая добавляется в приложение водителя. В контексте мобильных устройств она отвечает за:

  • Получение данных о местоположении по дорогам непосредственно из работающего приложения. Данные о местоположении по дорогам более точны, чем данные из FusedLocationProvider (FLP) в Android, поскольку он использует дорожную сеть Google для привязки местоположения к ближайшему участку дороги, что делает расчетное время прибытия и другую информацию из FLP гораздо более точной.
  • Пошаговая инструкция по навигации, позволяющая водителям эффективно добраться из пункта А в пункт Б, учитывая дорожную ситуацию в режиме реального времени и другие ограничения маршрута.
  • Запуск событий на основе прохождения маршрута, местоположения, скорости и т. д. с помощью обработчиков событий и зарегистрированных обратных вызовов.

Опыт по умолчанию

При внедрении Nav SDK предполагается, что клиентам необходима функция пошаговых инструкций. Именно поэтому в документации Nav SDK ( для Android и iOS ) содержатся инструкции по внедрению Nav SDK с включенной функцией пошаговых инструкций.

На Android отображение пошаговой карты в приложении осуществляется с помощью SupportNavigationFragment или NavigationView , а на iOS — с помощью GMSMapView . Эти элементы пользовательского интерфейса добавляют интерактивную карту и пошаговую навигацию в ваше приложение.

В следующем разделе мы сравним стандартный SDK навигации с поддержкой пошаговых инструкций с кодом SDK навигации без графического интерфейса для Android и iOS, выделив необходимые изменения.

Решение

Android

На Android это Java-код, входящий в состав демонстрационного приложения 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);

Как видите, представление указывает на макет, который должен использоваться для отображения навигации, и в данном случае создается объект SupportNavigationFragment , а не NavigationView .

Чтобы Nav SDK запускался в безголовом режиме, достаточно удалить эти две инструкции. Если же требуется переключаться между безголовым и обычным режимом (активная навигация), можно использовать переменную для определения необходимости использования безголового режима, например:

Boolean mHeadless = true;

Затем его можно использовать следующим образом:

@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);
   }

Переменная mHeadless может быть связана с компонентом пользовательского интерфейса (например, переключателем), который будет включать или отключать безголовый режим в зависимости от ситуации.

alt_textalt_text
Nav SDK работает с активной навигацией (без графического интерфейса отключен) То же приложение, но теперь с Nav SDK, работающим в безголовом режиме.

Как видно на приведенном выше примере справа, навигация Nav SDK работает в фоновом режиме, но пошаговая навигационная индикация отключена.

iOS

В iOS безголовый режим можно легко реализовать, добавив следующую настройку во время инициализации MapView: \

mapView.isHidden = true


Например:

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

Посмотрите, как это будет выглядеть — внешний вид экрана будет зависеть от способа реализации пользовательского интерфейса, а скриншот лишь иллюстрирует эффект скрытия карты:

alt_textalt_text
Активная навигация запущена

Пример приложения для iOS

То же приложение в безголовом режиме.

Вопросы реализации

Поскольку безголовый режим — это всего лишь скрытие навигационной карты с экрана, экономится только экранное время, что приводит к увеличению времени работы батареи устройства. Однако, поскольку Nav SDK будет продолжать работать, обновления местоположения и все обратные вызовы событий будут запускаться в обычном режиме, поэтому использование этой конфигурации не вызывает побочных эффектов.

Заключение

В этом документе показана гибкость Nav SDK и возможности его использования в различных операционных системах с учетом их ограничений. Он также позволяет пользователям настраивать интерфейс водителя, чтобы избежать отвлекающих факторов и повысить безопасность.

Дополнительные ресурсы

Если по указанным выше причинам необходимо отключить уведомления во время навигации, это также можно сделать, см. раздел «Изменение пошаговых уведомлений в Nav SDK» .