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

Введение

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

Объем

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

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

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

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

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

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

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

Решение

Андроид

На 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 запускался в режиме headless, нам нужно просто удалить эти две инструкции. Если идея заключается в переключении между headless и non-headless (активная навигация), можно использовать переменную для определения необходимости использования headless, например:

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 можно связать с компонентом пользовательского интерфейса (например, переключателем), который будет включать или выключать режим headless соответствующим образом.

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

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

iOS

На iOS режим headless можно реализовать очень просто, добавив следующую настройку во время инициализации 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
  }()

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

alt_textalt_text
Активная навигация работает на

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

То же приложение в режиме headless

Соображения по реализации

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

Заключение

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

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

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