Um feed de dados passo a passo fornece informações somente de navegação para dispositivos que não projetada para orientações de navegação baseadas em mapas. Ele oferece manobras futuras elementos fornecidos:
- ícones (esquerda, direita, retorno)
- virar números em rotatórias
- nomes de vias
- distâncias e tempo estimados para a próxima etapa ou etapa final da navegação destino
Você pode usar o feed de navegação guiada para criar experiências em que A interface do SDK do Navigation não é apropriada, por exemplo, para o Android Auto ou para a tela será mostrada quando uma pilha do Android completa não estiver disponível. Por exemplo, pode usá-lo para condutores de veículos de duas rodas, em que você pode projetar orientações somente de navegação para ajudá-los a chegar aos destinos mais rapidamente e muito mais com confiança e o mínimo de distrações.
Para usar o SDK, crie um serviço e registre-o com o SDK do Navigation para Android para que ele possa receber novas informações de navegação. em tempo real (cerca de uma vez por segundo, durante a navegação).
Este documento mostra como criar e registrar um serviço de navegação que recebe informações de navegação do SDK e informa o estado dela ao dispositivo receptor.
Visão geral
Esta seção descreve como adicionar a biblioteca TurnByTurn aos seus projetos e resume o fluxo de alto nível para a criação da funcionalidade de navegação guiada.
Adicionar a biblioteca TurnByTurn ao seu projeto usando o Maven (recomendado)
Para consumir uma versão independente da biblioteca TurnByTurn, siga estas etapas:
- Configure o ambiente para acessar o repositório Maven do host:
Maven
Adicione a instrução a seguir ao seu arquivo
pom.xml
:<project> ... <repositories> <repository> <id>google-maven-repository</id> <url>https://maven.google.com</url> </repository> </repositories> ... </project>
Gradle
Adicione a instrução a seguir ao seu arquivo
build.gradle
:repositories { ... google() }
Adicione a seguinte dependência à sua configuração do Maven ou 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' }
Adicione a biblioteca TurnByTurn ao seu projeto usando um arquivo JAR transferido por download (alternativa)
A biblioteca TurnByTurn está disponível como um arquivo JAR nesta pasta do SDK. Se não tiver acesso, entre em contato com seu representante.
- Baixe o arquivo
google_turnbyturn_*.jar
e descompacte-o. - Copie o arquivo JAR salvo no diretório
app/libs
do projeto. Adicione o código a seguir ao
build.gradle
para incluir o JAR no build.dependencies { ... api fileTree(include: ['*.jar'], dir: 'libs') }
Como usar a biblioteca TurnByTurn
Estas são as etapas principais para ativar a funcionalidade de navegação guiada. O as seções a seguir fornecem detalhes sobre cada etapa.
Criar um serviço para receber atualizações de navegação
O SDK do Navigation é vinculado ao seu serviço TurnByTurn e envia atualizações de navegação por meio da plataforma Chat em grupo , É possível criar um novo serviço de navegação para essas atualizações ou usar um serviço.
A vantagem de usar um serviço para receber atualizações de navegação é que ele em um processo separado em segundo plano.
O serviço no exemplo a seguir recebe informações de navegação e usa
o TurnByTurnManager
para converter os dados em um objeto NavInfo
que
contém os detalhes de navegação.
/** * 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 mensagem
NavInfo
mensagens podem ser identificadas pelo
Message.what
campo da classe Message
, que é definido como o valor do
TurnByTurnManager.MSG_NAV_INFO
.
Como registrar o serviço para atualizações de navegação
Os snippets de código a seguir registram o serviço de navegação.
boolean isNavInfoReceivingServiceRegistered = navigator.registerServiceForNavUpdates( getPackageName(), NavInfoReceivingService.class.getName(), numNextStepsToPreview);
Como iniciar e interromper o serviço
O serviço de navegação ficará ativo enquanto o
O SDK do Navigation é vinculado a ele. Você pode chamar manualmente
startService()
e stopService()
para controlar a vida útil do serviço de navegação.
mas quando você registra seu serviço com o
SDK do Navigation, seu serviço será iniciado automaticamente.
só é interrompido quando você cancela o registro. Dependendo de como você configura seu app, é possível
considerar iniciar um serviço em primeiro plano, conforme descrito no
documentação Serviços
geral do Google.
Como cancelar o registro do serviço
Para deixar de receber atualizações de navegação, cancele o registro do serviço do SDK do Navigation.
navigator.unregisterServiceForNavUpdates();
Entender os estados de navegação
Usar NavInfo.getNavState()
para ver o estado atual da navegação, que é um.
um dos seguintes:
A caminho: o estado
ENROUTE
significa que a navegação guiada está atualmente ativo e o usuário está no trajeto fornecido. Informações sobre o momento o passo da próxima manobra está disponível.Novo trajeto:
REROUTING
significa que a navegação está em andamento, mas o Navigator está procurando uma nova rota. O próximo passo da manobra não é disponível, porque ainda não há um novo trajeto. No app de exemplo, um "Redirecionando..." a mensagem aparece exibição de informações de navegação. Quando uma rota é encontrada, uma mensagemNavInfo
é enviado com o estadoENROUTE
.Interrompido:
STOPPED
significa que a navegação terminou. Por exemplo, navegação é interrompida quando o usuário sai da navegação no aplicativo. No aplicativo de exemplo, O estadoSTOPPED
limpa a exibição de informações de navegação para evitar etapas restantes instruções sejam exibidas.
Preencher a exibição do feed
Agora que você configurou seu serviço de navegação guiada, esta seção aborda os elementos visuais e de texto que você pode usar para preencher os cartões de orientação para o feed de navegação guiada.
Campos de informações do card de navegação
Quando o usuário entra na navegação guiada, um cartão de navegação é exibido na parte superior, contendo dados de navegação preenchidos a partir do SDK do Navigation. A imagem relacionada mostra um exemplo esses elementos essenciais de navegação.
Esta tabela mostra os campos de informações de navegação e onde eles podem ser encontrados.
Campos de cada etapa de navegação | Campos da viagem geral |
---|---|
Encontrado em StepInfo |
Encontrado em NavInfo |
Nome completo da via | Tempo restante |
O ícone da manobra | Distância até o destino |
Distância até a próxima etapa | |
Campos de orientação de faixa |
Orientação de faixa
O SDK do Navigation representa as faixas na navegação.
Virar cartão como
Lane (link em inglês)
e
LaneDirection
objetos de dados. Um objeto Lane
representa uma faixa específica durante a navegação e
tem uma lista de objetos LaneDirection
que descreve todas as curvas que podem ser
feita nessa pista.
A direção recomendada que um usuário deve seguir em uma faixa é marcada pelo isRecommended .
Exemplo de orientação de faixa
O snippet a seguir ilustra a representação de dados das faixas exibidas acima.
// Lane 1
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false},
{/*laneShape=*/ SLIGHT_LEFT, /*isRecommended=*/ true}]
// Lane 2
LaneDirections = [{/*laneShape=*/ STRAIGHT, /*isRecommended=*/ false}]
Crie ícones para manobras
O
Maneuver
enum define cada manobra possível que pode ocorrer durante a navegação, e você
pode extrair a manobra de uma determinada etapa com o método StepInfo.getManeuver()
.
Crie ícones de manobras e combine-os com as manobras associadas.
Para algumas manobras, você pode configurar um mapeamento de um para um para um ícone, como
DESTINATION_LEFT
e DESTINATION_RIGHT
. No entanto, como algumas manobras são
semelhante, você pode querer mapear mais de uma manobra para um único ícone. Para
TURN_LEFT
e ON_RAMP_LEFT
podem ser mapeados para o ícone de virar à esquerda.
Algumas manobras contêm um rótulo clockwise
ou counterclockwise
extra,
que o SDK determina com base no lado do motorista de um país. Por exemplo, em
países em que a direção é do lado esquerdo da via, os motoristas pegam uma
rotatória ou retorno em sentido horário, enquanto que o lado direito
de países sigam no sentido horário. O SDK do Navigation detecta
se uma manobra ocorre no trânsito do lado esquerdo ou direito e gera o
na manobra apropriada. Portanto, seu ícone de manobra pode ser diferente para um
em sentido horário ou anti-horário.
Clique para abrir e conferir exemplos de ícones de diferentes manobras
Ícone de exemplo | Manobras por turno |
---|---|
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
|
Usar ícones gerados
Para facilitar os casos de uso do Android Auto, a O SDK do Navigation oferece suporte à geração de manobras e faixas ícones de orientação. Esses ícones se encaixam nas orientações de tamanho de imagem do Android Auto Biblioteca Car App que recomenda segmentar uma caixa delimitadora de 500 x 74 dp. Consulte setsLaneImage e CarIcon na documentação de referência do Android para mais detalhes.
Exemplo de geração de ícone
NavigationUpdatesOptions options =
NavigationUpdatesOptions.builder()
.setNumNextStepsToPreview(numNextStepsToPreview)
.setGeneratedStepImagesType(GeneratedStepImagesType.BITMAP)
.setDisplayMetrics(getResources().getDisplayMetrics())
.build();
boolean isRegistered =
navigator.registerServiceForNavUpdates(
getPackageName(),
NavInfoReceivingService.class.getName(),
options);
Depois de ativar a geração de ícones, o objeto StepInfo
do TurnbyTurn preenche o
Campos maneuverBitmap e lanesBitmap com os ícones.
A seguir
- Para apps Android Auto: