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é.
SDK Navigation
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.
|
|
| 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 :
|
|
| 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.