Ativar feed de dados passo a passo

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.

Para consumir uma versão independente da biblioteca TurnByTurn, siga estas etapas:

  1. 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()
    }
        
  2. Adicione a seguinte dependência à sua configuração do Maven ou Gradle:
  3. 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.

  1. Baixe o arquivo google_turnbyturn_*.jar e descompacte-o.
  2. Copie o arquivo JAR salvo no diretório app/libs do projeto.
  3. 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. A as seções a seguir fornecem detalhes sobre cada etapa.

  1. Criar um serviço para receber atualizações de navegação.

  2. Registre o serviço.

  3. Entenda os estados de navegação.

  4. Confira um exemplo de tela de navegação que mostra elementos essenciais.

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 do Google. É 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 no 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 mensagem NavInfo é enviado com o estado ENROUTE.

  • 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 estado STOPPED 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.

Uma tela de celular que mostra uma curva à esquerda em 30 metros em W Ahwanee
Mé. Na parte inferior da tela, o tempo restante até o destino é de 46 minutos,
e a distância restante é de 39
milhas.

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.

Exemplo de indicação de faixa
configuração do Terraform.

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

A 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 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 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

Uma pequena lista de ícones gerados fornecidos pelo objeto Navigation
SDK do Vertex AI Pipelines.

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