Un feed de datos paso a paso brinda información solo de navegación a los dispositivos diseñada para la guía de navegación basada en mapas. Proporciona maniobras futuras o los elementos que proporciones:
- íconos (izquierda, derecha, giro en U)
- girar números en rotondas
- nombres de rutas
- las distancias estimadas y el tiempo hasta el próximo paso o el final de la navegación. destino
Puedes usar el feed paso a paso para crear experiencias en las que la totalidad La IU del SDK de Navigation no es apropiada, como para Android Auto o apps Se muestra la pantalla cuando no hay una pila completa de Android disponible. Por ejemplo, podría usarla para conductores de vehículos de dos ruedas, donde puedes proyectar orientación solo de navegación para ayudarlos a llegar a sus destinos más rápido y más con confianza y mínimas distracciones.
Para usar el SDK, debes crear un servicio y registrarlo con el SDK de Navigation para Android para que pueda recibir información de navegación nueva en tiempo real (aproximadamente una vez por segundo durante la navegación).
En este documento, se muestra cómo crear y registrar un servicio de navegación que recibe información de navegación del SDK y proporciona el estado de la navegación con el dispositivo receptor.
Descripción general
Esta sección describe cómo agregar la biblioteca TurnByTurn a tus proyectos y resume el flujo de alto nivel para crear funcionalidades paso a paso.
Agrega la biblioteca de TurnByTurn a tu proyecto con Maven (recomendado)
Para consumir una versión independiente de la biblioteca TurnByTurn, sigue estos pasos:
- Configura tu entorno para acceder al repositorio de Maven host:
Maven
Agrega lo siguiente a tu archivo
pom.xml
:<project> ... <repositories> <repository> <id>google-maven-repository</id> <url>https://maven.google.com</url> </repository> </repositories> ... </project>
Gradle
Agrega lo siguiente a tu archivo
build.gradle
:repositories { ... google() }
Agrega la siguiente dependencia a tu configuración de Maven o Gradle:
-
Maven
<dependencies> ... <dependency> <groupId>com.google.android.maps</groupId> <artifactId>google_turnbyturn</artifactId> <version>1.0.0</version> </dependency> </dependencies>
Gradle
dependencies { ... implementation 'com.google.android.maps:google_turnbyturn:1.0.0' }
Agrega la biblioteca de TurnByTurn a tu proyecto con un archivo JAR descargado (alternativa).
La biblioteca de TurnByTurn está disponible como un archivo JAR en esta carpeta del SDK. Si no tienes acceso, comunícate con tu representante.
- Descarga y descomprime
google_turnbyturn_*.jar
. - Copia el archivo JAR descargado en el directorio
app/libs
de tu proyecto. Agrega lo siguiente a tu
build.gradle
para incluir el JAR en tu compilación.dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
Cómo usar la biblioteca TurnByTurn
Estos son los pasos de alto nivel para habilitar la funcionalidad paso a paso. El a continuación proporcionan detalles sobre cada paso.
Crea un servicio para recibir actualizaciones de navegación.
Consulta un ejemplo de pantalla de navegación en la que se muestran elementos esenciales.
Crea un servicio para recibir actualizaciones de navegación
El SDK de Navigation se vincula a tu servicio de TurnByTurn y le envía actualizaciones de navegación a través de la interfaz Android Chat en grupo de Google Cloud. Puedes crear un nuevo servicio de navegación para estas actualizaciones o usar un servicio existente servicio.
El beneficio de usar un servicio para recibir actualizaciones de navegación es que el servicio pueden residir en un proceso independiente en segundo plano.
El servicio del siguiente ejemplo recibe información de navegación y usa
el TurnByTurnManager
para convertir los datos en un objeto NavInfo
que
contiene los detalles de navegación.
/** * Receives turn-by-turn navigation information forwarded from NavSDK. */ public class NavInfoReceivingService extends Service { /** The messenger used by the service to receive nav step updates. */ private Messenger incomingMessenger; private TurnByTurnManager turnByTurnManager; private final class IncomingNavStepHandler extends Handler { public IncomingNavStepHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { // Identify the message through the msg.what field. if (TurnByTurnManager.MSG_NAV_INFO == msg.what) { // Extract the NavInfo object using the TurnByTurnManager. NavInfo navInfo = turnByTurnManager .readNavInfoFromBundle(msg.getData())); // Do something with the NavInfo } } } @Nullable @Override public IBinder onBind(Intent intent) { return incomingMessenger.getBinder(); } @Override public void onCreate() { turnByTurnManager = TurnByTurnManager.createInstance(); HandlerThread thread = new HandlerThread("NavInfoReceivingService", Process.THREAD_PRIORITY_DEFAULT); thread.start(); incomingMessenger = new Messenger( new IncomingNavStepHandler(thread.getLooper())); }
Códigos de mensaje
Los mensajes NavInfo
se pueden identificar a través del
Message.what
de la clase Message
, que se establece en el valor de
TurnByTurnManager.MSG_NAV_INFO
Cómo registrar el servicio para actualizaciones de navegación
Los siguientes fragmentos de código registran el servicio de navegación.
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
Cómo iniciar y detener el servicio
El servicio de navegación estará activo mientras
El SDK de Navigation se vincula a él. Puedes llamar de forma manual
startService()
y stopService()
para controlar la vida útil de la navegación
pero cuando registras tu servicio en el
Navigation SDK, tu servicio se inicia automáticamente
solo se detiene cuando cancelas el registro. Según cómo configures tu app, puedes
considere iniciar un servicio en primer plano, como se describe en el artículo
documentación Servicios
descripción general.
Cancela el registro del servicio
Para dejar de recibir actualizaciones de navegación, cancela el registro del servicio en SDK de Navigation.
navigator.unregisterServiceForNavUpdates();
Información sobre los estados de navegación
Usa NavInfo.getNavState()
para obtener el estado actual de la navegación, que es uno.
de las siguientes opciones:
Enruta: El estado
ENROUTE
indica que, en este momento, la navegación guiada está en curso. activo y el usuario está en la ruta proporcionada. Información sobre el estado el próximo paso de maniobra está disponible.Redireccionamiento:
REROUTING
indica que la navegación está en curso, pero Navigator está buscando una nueva ruta. El próximo paso de maniobra no es porque todavía no hay una ruta nueva. En la app de ejemplo, aparece el mensaje "Redirigiendo..." que aparezca en la pantalla de información de navegación. Una vez que se encuentra una ruta, aparece un mensajeNavInfo
enviados con el estadoENROUTE
.Detenida:
STOPPED
indica que finalizó la navegación. Por ejemplo, la navegación se detiene cuando el usuario sale de la navegación en la aplicación. En la app de ejemplo, se muestra un El estadoSTOPPED
borra la pantalla de información de navegación para evitar el paso persistente. instrucciones para evitar que se muestren.
Propagar la visualización del feed
Ahora que ya configuraste tu servicio paso a paso, esta sección abarca los elementos visuales y de texto que puedes usar para completar las tarjetas de guía del feed paso a paso.
Campos de información de la tarjeta de navegación
Cuando el usuario ingresa a la navegación guiada, aparece una tarjeta de navegación en la parte superior. que contenga datos de navegación propagados a partir de las SDK de Navigation. La imagen relacionada muestra un ejemplo de estos elementos esenciales de navegación.
En esta tabla, se muestran los campos de información de navegación y dónde se encuentran.
Campos para cada paso de navegación | Campos del viaje general |
---|---|
Se encontró en StepInfo |
Se encontró en NavInfo |
Nombre completo de la ruta | Tiempo restante |
Ícono de maniobra | Distancia al destino |
Distancia al paso siguiente | |
Campos de indicación de carril |
Indicación de carril
El SDK de Navigation representa los carriles en la navegación
Gira la tarjeta como
Carril
y
LaneDirection
objetos de datos. Un objeto Lane
representa un carril específico durante la navegación y
tiene una lista de objetos LaneDirection
que describen todos los giros que se pueden
desde este carril.
La dirección recomendada que debe tomar un usuario en un carril está marcada por el isRecommended .
Ejemplo de indicación de carril
En el siguiente fragmento, se ilustra la representación de datos de los carriles que se muestran arriba.
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
Crea íconos para maniobras
El
Maneuver
enum define cada posible maniobra que puede ocurrir durante la navegación, y tú
puedes obtener la maniobra para un paso determinado desde el método StepInfo.getManeuver()
.
Debes crear iconos de maniobras y emparejarlos con sus maniobras asociadas.
Para algunas maniobras, puedes configurar una asignación uno a uno a un icono, como
DESTINATION_LEFT
y DESTINATION_RIGHT
. Sin embargo, dado que algunas maniobras son
similar, es posible que desees asignar más de una maniobra a un solo icono. Para
Los ejemplos TURN_LEFT
y ON_RAMP_LEFT
podrían asignarse al ícono de giro a la izquierda.
Algunas maniobras contienen una etiqueta clockwise
o counterclockwise
adicional,
que el SDK determina en función del lado de conducción de un país. Por ejemplo, en
países donde la conducción está en el lado izquierdo de la ruta, los conductores toman un
rotonda o giro en U en el sentido de las manecillas del reloj, mientras que en el lado derecho de la ruta
países van en el sentido de las manecillas del reloj. El SDK de Navigation detecta
si una maniobra ocurre en tráfico del lado izquierdo o derecho y genera la
maniobra adecuada. Por lo tanto, tu ícono de maniobra puede ser diferente para un
en el sentido de las manecillas del reloj,
en lugar de en el sentido contrario.
Expandir para ver íconos de ejemplo de diferentes maniobras
Ícono de muestra | Maniobras de giro por giro |
---|---|
DEPART UNKNOWN |
|
STRAIGHT ON_RAMP_UNSPECIFIED OFF_RAMP_UNSPECIFIED NAME_CHANGE
|
|
TURN_RIGHT ON_RAMP_RIGHT
|
|
TURN_LEFT ON_RAMP_LEFT
|
|
TURN_SLIGHT_RIGHT ON_RAMP_SLIGHT_RIGHT OFF_RAMP_SLIGHT_RIGHT
|
|
TURN_SLIGHT_LEFT ON_RAMP_SLIGHT_LEFT OFF_RAMP_SLIGHT_LEFT
|
|
TURN_SHARP_RIGHT ON_RAMP_SHARP_RIGHT OFF_RAMP_SHARP_RIGHT
|
|
TURN_SHARP_LEFT ON_RAMP_SHARP_LEFT OFF_RAMP_SHARP_LEFT
|
|
TURN_U_TURN_COUNTERCLOCKWISE ON_RAMP_U_TURN_COUNTERCLOCKWISE OFF_RAMP_U_TURN_COUNTERCLOCKWISE
|
|
TURN_U_TURN_CLOCKWISE ON_RAMP_U_TURN_CLOCKWISE OFF_RAMP_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_RIGHT_CLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_STRAIGHT_CLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SLIGHT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_LEFT_CLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_SHARP_LEFT_CLOCKWISE
|
|
ROUNDABOUT_U_TURN_COUNTERCLOCKWISE
|
|
ROUNDABOUT_U_TURN_CLOCKWISE
|
|
ROUNDABOUT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_CLOCKWISE
|
|
ROUNDABOUT_EXIT_COUNTERCLOCKWISE
|
|
ROUNDABOUT_EXIT_CLOCKWISE
|
|
MERGE_RIGHT OFF_RAMP_RIGHT
|
|
MERGE_LEFT OFF_RAMP_LEFT
|
|
FORK_RIGHT TURN_KEEP_RIGHT ON_RAMP_KEEP_RIGHT OFF_RAMP_KEEP_RIGHT
|
|
FORK_LEFT TURN_KEEP_LEFT ON_RAMP_KEEP_LEFT OFF_RAMP_KEEP_LEFT
|
|
MERGE_UNSPECIFIED
|
|
DESTINATION
|
|
DESTINATION_RIGHT
|
|
DESTINATION_LEFT
|
|
FERRY_BOAT
|
|
FERRY_TRAIN
|
Cómo usar íconos generados
Para facilitar los casos de uso de Android Auto, la El SDK de Navigation admite la generación de maniobras y carriles íconos de guía. Estos íconos se ajustan a la guía de tamaño de la imagen de Android Auto. Biblioteca de apps para vehículos que recomienda orientarla a un cuadro de límite de 500 x 74 dp. Consulta setsLaneImage y CarIcon en la documentación de referencia de Android para obtener más información.
Ejemplo de generación de íconos
NavigationUpdatesOptions options =
NavigationUpdatesOptions.builder()
.setNumNextStepsToPreview(numNextStepsToPreview)
.setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
.setDisplayMetrics(getResources().getDisplayMetrics())
.build();
boolean isRegistered =
navigator.registerServiceForNavUpdates(
getPackageName(),
NavInfoReceivingService.class.getName(),
options);
Después de habilitar la generación de íconos, el objeto StepInfo
de TurnbyTurn completa el objeto
Campos maneuverBitmap y lanesBitmap con los íconos.
¿Qué sigue?
- En apps para Android Auto: