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 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. 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 pour les courtes distances) peuvent également ne pas avoir besoin d'activer la navigation détaillée, ce qui permet d'économiser la batterie de l'appareil.
Scope (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 interface utilisateur 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é.
SDK Navigation
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 la route 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 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é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 détaillé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 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'UI ajoutent l'UI de la carte interactive et de la navigation détaillée à votre application.
Dans la section suivante, nous comparons le code du SDK Navigation par défaut avec la navigation détaillée activée 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;
Il peut ensuite être utilisé, comme ceci :
@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 sans interface graphique en conséquence.
|
|
| 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 détaillé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 :
|
|
| 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 la position 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, cela peut également être fait. Veuillez consulter Modifier les notifications détaillées dans le SDK Navigation.