Введение
Навигационный SDK (Nav SDK) предоставляет лучшую в своем классе функцию пошаговой навигации, которая может быть очень полезна клиентам и водителям, особенно начинающим водителям или водителям, незнакомым с регионом. Однако существуют специфические сценарии использования, когда компании не хотят отвлекать внимание водителей от дороги с помощью интерфейса пошаговой навигации, но при этом хотят отслеживать местоположение транспортных средств и отслеживать события, связанные с маршрутом. Один из примеров — водители грузовиков, особенно если они перевозят опасные материалы. Другие компании, осуществляющие доставку различными способами — например, пешком на короткие расстояния — могут не нуждаться в включенной пошаговой навигации, что позволит сэкономить заряд батареи устройства.
Объем
В этом документе описывается, как компании могут скрыть карту навигации (представление) из Nav SDK и при этом пользоваться всеми функциями Nav SDK, касающимися отслеживания местоположения, подписки на события и обратных вызовов. Данные, полученные из Nav SDK в безголовом режиме, могут быть использованы для улучшения возможностей отслеживания транспортных средств и более точного понимания расчетного времени прибытия, что в конечном итоге приводит к прозрачности и эффективности.
Навигационный 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 может быть связана с компонентом пользовательского интерфейса (например, переключателем), который будет включать или отключать безголовый режим в зависимости от ситуации.
![]() | ![]() |
| 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
}()
Посмотрите, как это будет выглядеть — внешний вид экрана будет зависеть от способа реализации пользовательского интерфейса, а скриншот лишь иллюстрирует эффект скрытия карты:
![]() | ![]() |
| Активная навигация запущена Пример приложения для iOS | То же приложение в безголовом режиме. |
Вопросы реализации
Поскольку безголовый режим — это всего лишь скрытие навигационной карты с экрана, экономится только экранное время, что приводит к увеличению времени работы батареи устройства. Однако, поскольку Nav SDK будет продолжать работать, обновления местоположения и все обратные вызовы событий будут запускаться в обычном режиме, поэтому использование этой конфигурации не вызывает побочных эффектов.
Заключение
В этом документе показана гибкость Nav SDK и возможности его использования в различных операционных системах с учетом их ограничений. Он также позволяет пользователям настраивать интерфейс водителя, чтобы избежать отвлекающих факторов и повысить безопасность.
Дополнительные ресурсы
Если по указанным выше причинам необходимо отключить уведомления во время навигации, это также можно сделать, см. раздел «Изменение пошаговых уведомлений в Nav SDK» .



