SDK Nav – Mode sans interface graphique

Introduction

Le SDK Navigation (SDK Nav) fournit une fonctionnalité de navigation détaillée de qualité exceptionnelle qui peut être très utile aux clients et aux conducteurs, en particulier aux nouveaux conducteurs ou à ceux qui ne connaissent pas la région. Cependant, dans certains cas d'utilisation spécifiques, les entreprises ne souhaitent pas détourner l'attention des conducteurs de la route avec l'interface utilisateur de navigation détaillée, mais veulent tout de même suivre la position des véhicules et écouter les événements liés à l'itinéraire qu'ils suivent. C'est le cas, par exemple, des conducteurs de camions, en particulier s'ils transportent des matières dangereuses. D'autres entreprises qui effectuent des livraisons selon différentes modalités (par exemple, à pied sur de courtes distances) n'ont peut-être pas besoin d'activer le guidage vocal, ce qui permettrait d'économiser la batterie de l'appareil.

Portée

Ce document explique comment les entreprises peuvent masquer la carte de navigation (vue) du SDK Nav tout en bénéficiant de toutes les fonctionnalités du SDK Nav en ce qui concerne le suivi de la position, les abonnements aux événements et les rappels. Les données capturées à partir du SDK Nav en mode headless peuvent être utilisées pour améliorer la capacité à suivre les véhicules et à comprendre plus précisément les heures d'arrivée prévues, ce qui, en fin de compte, conduit à la transparence et à l'efficacité.

Le SDK Navigation est une bibliothèque Android / iOS native qui est ajoutée à l'application du conducteur. Dans le contexte de la mobilité, il est responsable des éléments suivants :

  • Obtenir des positions ajustées à la route à partir de l'application qui l'exécute. Les positions ajustées à la route sont plus précises que FusedLocationProvider (FLP) d'Android, car elles utilisent le réseau routier de Google pour ajuster les positions au segment de route le plus proche, ce qui rend les heures d'arrivée prévues et d'autres informations de FLP beaucoup plus précises.
  • Expérience de navigation détaillée qui permet aux conducteurs de se rendre efficacement d'un point A à un point B en tenant compte du trafic en temps réel et d'autres restrictions d'itinéraire.
  • Déclencher des événements en fonction de la progression de l'itinéraire, de la position, de la vitesse, etc. via des écouteurs d'événements et des rappels enregistrés.

Version par défaut

Lorsque les clients implémentent le SDK Nav, il est supposé qu'ils ont besoin de la fonctionnalité de navigation détaillée. C'est pourquoi la documentation du SDK Nav (Android et iOS) fournit des instructions sur l'implémentation du SDK Nav avec la navigation détaillée activée.

Sur Android, le rendu de la carte de navigation détaillée dans l'application est obtenu à l'aide d'un SupportNavigationFragment ou d'une NavigationView, tandis que sur iOS, il s'agit d'une GMSMapView. Ces éléments d'interface utilisateur ajoutent la carte interactive et l'interface utilisateur de navigation détaillée à votre application.

Dans la section suivante, nous comparons le SDK Nav par défaut avec le code de guidage vocal activé et le code du SDK Nav headless pour Android et iOS, en mettant en évidence les modifications requises.

Solution

Android

Sur Android, il s'agit du code Java fourni avec l'application exemple du SDK Nav.

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

Comme vous pouvez le voir, la vue pointe vers la mise en page à utiliser pour dessiner l'expérience de navigation. Dans ce cas, un SupportNavigationFragment est créé plutôt que la NavigationView.

Pour que le SDK Nav démarre en mode headless, il suffit de supprimer ces deux instructions. Si l'idée est de basculer entre le mode headless et le mode non headless (navigation active), une variable peut être utilisée pour déterminer si le mode headless doit être utilisé ou non. Par exemple :

Boolean mHeadless = true;

Elle peut ensuite être utilisée comme suit :

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

La variable mHeadless peut être associée à un composant d'interface utilisateur (par exemple, un bouton bascule) qui activera ou désactivera le mode headless en conséquence.

alt_text alt_text
SDK Nav exécuté avec la navigation active (mode headless désactivé) Même application, mais avec le SDK Nav exécuté en mode headless

Comme vous pouvez le voir dans l'exemple de droite ci-dessus, la navigation du SDK Nav s'exécute en arrière-plan, mais l'expérience de navigation détaillée est désactivée.

iOS

Sur iOS, le mode headless peut être activé très facilement en ajoutant le paramètre suivant lors de l'initialisation de la MapView :

mapView.isHidden = true


Par exemple :

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

Voici à quoi cela ressemblerait. L'écran dépend de la façon dont l'interface utilisateur est implémentée. La capture d'écran n'est qu'une illustration de l'effet du masquage de la mapView :

alt_text alt_text
Navigation active en cours d'exécution sur

l'exemple d'application iOS

Même application en mode headless

Observations concernant la mise en œuvre

Le mode headless ne consiste qu'à masquer la carte de navigation à l'écran. Seul le temps d'écran est économisé, ce qui permet de prolonger l'autonomie de la batterie de l'appareil. Toutefois, comme le SDK Nav continuera de s'exécuter, les mises à jour de la position et tous les rappels d'événements seront déclenchés normalement. Par conséquent, l'utilisation de cette configuration n'a aucun effet secondaire.

Conclusion

Ce document montre la flexibilité du SDK Nav et ce que nous pouvons réaliser dans différents systèmes d'exploitation compte tenu de leurs restrictions. Il permet également aux clients de personnaliser l'expérience de leurs conducteurs pour éviter les distractions et améliorer la sécurité.

Autres ressources

Si les notifications doivent être désactivées pendant la navigation pour les raisons susmentionnées, cela est également possible. Pour en savoir plus, consultez Modifier les notifications de guidage vocal dans le SDK Nav.