SDK Nav – Mode sans interface graphique

Introduction

Le SDK Navigation (SDK Nav) fournit une fonctionnalité de navigation détaillée de premier ordre 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. Toutefois, dans certains cas d'utilisation spécifiques, les entreprises ne souhaitent pas détourner l'attention des conducteurs de la route avec l'UI de navigation guidé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. Les chauffeurs de poids lourds en sont un exemple, en particulier s'ils transportent des matières dangereuses. D'autres entreprises qui effectuent des livraisons en utilisant différentes modalités (par exemple, à pied sur de courtes distances) peuvent également ne pas avoir besoin d'activer la navigation guidée, ce qui permet d'économiser la batterie de l'appareil.

Portée

Ce document explique comment les entreprises peuvent masquer la carte de navigation (vue) du SDK Navigation tout en continuant à bénéficier de toutes les fonctionnalités du SDK Navigation en ce qui concerne le suivi de la position, les abonnements aux événements et les rappels. Les données capturées par le SDK Navigation en mode sans affichage 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 permet d'améliorer la transparence et l'efficacité.

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

  • Obtenir les positions ajustées sur la route à partir de l'application qui l'exécute. Les positions ancrées sur les routes sont plus précises que celles fournies par FusedLocationProvider (FLP) d'Android. En effet, elles utilisent le réseau routier de Google pour ancrer les positions sur le segment de route le plus proche, ce qui rend les estimations de l'heure d'arrivée et les autres informations de FLP beaucoup plus précises.
  • Expérience de navigation 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 de route.
  • Déclenchement d'é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 Navigation, nous partons du principe qu'ils ont besoin de la fonctionnalité de navigation guidée. C'est pourquoi la documentation du SDK Navigation (Android et iOS) fournit des instructions sur l'implémentation du SDK Navigation avec la navigation guidée activée.

Sur Android, le rendu de la carte 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 code du SDK Navigation par défaut avec le code du SDK Navigation sans interface utilisateur pour Android et iOS, en mettant en évidence les modifications requises.

Solution

Android

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

@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éé au lieu de NavigationView.

Pour que le SDK Navigation 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;

Vous pourrez ensuite l'utiliser 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'UI (par exemple, un bouton bascule) qui activera ou désactivera le mode sans interface graphique en conséquence.

alt_text alt_text
SDK Navigation exécuté avec la navigation active (sans interface utilisateur) Même application, mais avec le SDK Navigation exécuté en mode sans interface graphique

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

iOS

Sur iOS, le mode sans affichage peut être activé très facilement en ajoutant le paramètre suivant lors de l'initialisation de 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'UI est implémentée. La capture d'écran sert uniquement à illustrer l'effet de masquage de la mapView :

alt_text alt_text
Navigation active en cours sur

Exemple d'application iOS

Même application en mode headless

Observations concernant la mise en œuvre

Le mode sans affichage consiste simplement à masquer la carte de navigation à l'écran. Seul le temps d'écran est enregistré, ce qui permet d'économiser la batterie de l'appareil. Toutefois, comme le SDK Navigation continuera de s'exécuter, les mises à jour de localisation et tous les rappels d'événements seront déclenchés normalement. L'utilisation de cette configuration n'a donc aucun effet secondaire.

Conclusion

Ce document montre la flexibilité du SDK Navigation et ce que nous pouvons accomplir dans différents systèmes d'exploitation en fonction de leurs restrictions. Il permet également aux clients de personnaliser leur expérience de conduite 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, vous pouvez également le faire. Pour en savoir plus, consultez Modifier les notifications de navigation dans le SDK Navigation.