Selecione a plataforma: Android iOS

Configurar interrupções em tempo real

As interrupções em tempo real são um conjunto de recursos que alertam os usuários sobre interrupções no trajeto e permitem que eles informem e verifiquem as interrupções encontradas. Exemplos de interrupções incluem acidentes de veículos, congestionamento de trânsito, presença de polícia e radares de velocidade, obras, interdições de faixas e determinadas condições climáticas. Esta página explica os recursos de interrupção em tempo real e as opções de configuração, incluindo considerações para apps que usam interfaces de navegação personalizadas.

Recursos de interrupção em tempo real

O SDK Navigation inclui os seguintes recursos de interrupção em tempo real como parte da experiência de navegação principal:

Esses recursos são configuráveis e ativados por padrão. As seções a seguir fornecem mais informações sobre os recursos e as opções de configuração disponíveis.

Indicações interativas de interrupções ao longo das rotas

Quando um app mostra um trajeto, seja em um panorama do trajeto ou durante a navegação ativa, todas as interrupções atuais aparecem como indicações ao longo do trajeto. As indicações incluem um ícone que indica o tipo de interrupção.

Balões de texto ao longo dos trajetos

Você pode controlar a exibição de indicações de interrupção ao longo das rotas usando setTrafficPromptsEnabled, que também controla a exibição de alertas automatizados quando um usuário se aproxima de uma interrupção.

// Using the SupportNavigationFragment
mNavFragment.setTrafficPromptsEnabled(true);

// Using the NavigationView
navigationView.setTrafficPromptsEnabled(true);

Mostrar detalhes da interrupção quando um usuário toca em uma indicação

Os usuários podem tocar em uma indicação para mostrar um card de informações com mais detalhes sobre a interrupção, incluindo o tipo, a hora em que foi informada pela última vez e, em alguns casos, uma opção para votar se a interrupção ainda está presente. Há dois tipos diferentes de cards de informações que podem aparecer, dependendo se o usuário está na navegação ativa, e as opções de configuração variam para cada tipo.

Cards de informações de indicações em panoramas do trajeto, antes de iniciar a navegação ativa

Quando um usuário toca em uma indicação em um panorama do trajeto, antes de iniciar a navegação ativa, um card de informações aparece com mais detalhes sobre a interrupção.

Card de informações da visão geral

Você pode controlar a capacidade dos usuários de tocar em indicações de interrupção em visões gerais do trajeto para mostrar mais informações usando setTrafficIncidentCardsEnabled .

// Using the SupportNavigationFragment
mNavFragment.setTrafficIncidentCardsEnabled(true);

// Using the NavigationView
navigationView.setTrafficIncidentCardsEnabled(true);

Cards de informações de indicações durante a navegação ativa

Quando uma indicação de interrupção aparece ao longo de um trajeto durante a navegação ativa, os usuários podem tocar na indicação para mostrar um card de informações com mais detalhes sobre a interrupção, incluindo o tipo e a hora em que foi informada pela última vez, bem como botões para votar se a interrupção ainda está presente. Os votos enviados pelos usuários são processados pelo Google e podem aparecer no mapa para outros usuários do Google Maps e do SDK Navigation, além de serem usados para determinar se a interrupção deve continuar sendo mostrada.

Card de informações da navegação ativa

Você pode controlar a exibição e a capacidade de toque das indicações de interrupção durante a navegação ativa usando setTrafficPromptsEnabled , que também controla a exibição de indicações ao longo das rotas e a exibição de alertas automatizados quando um usuário se aproxima de uma interrupção.

// Using the SupportNavigationFragment
mNavFragment.setTrafficPromptsEnabled(true);

// Using the NavigationView
navigationView.setTrafficPromptsEnabled(true);

Alertas de interrupção automatizados com votação durante a navegação ativa

Durante a navegação ativa, quando um usuário se aproxima de uma interrupção ao longo de um trajeto, um comando aparece com informações sobre a interrupção e botões para votar se a interrupção ainda está presente. Os votos enviados pelos usuários são processados pelo Google e podem aparecer no mapa para outros usuários do Google Maps e do SDK Navigation, além de serem usados para determinar se a interrupção deve continuar sendo mostrada.

Card de informações da navegação ativa

Você pode configurar a exibição de comandos de alerta durante a navegação ativa usando setTrafficPromptsEnabled , que também controla a exibição de indicações ao longo das rotas.

// Using the SupportNavigationFragment
mNavFragment.setTrafficPromptsEnabled(true);

// Using the NavigationView
navigationView.setTrafficPromptsEnabled(true);

Relatórios de interrupção durante a navegação ativa

Durante o modo de navegação ativa, um botão aparece na interface de navegação que permite que os usuários informem novas interrupções ao longo do trajeto. Quando um usuário toca no botão, um menu com os tipos de interrupção disponíveis para informar aparece. Os relatórios enviados pelos usuários são processados pelo Google e podem aparecer no mapa para outros usuários do Google Maps e do SDK Navigation.

Botão de denúncia Menu "Relatórios"

Mostrar ou ocultar o botão de relatório padrão

Você pode configurar a visibilidade do botão de relatório padrão durante a navegação ativa usando setReportIncidentButtonEnabled .

// Enables the incident reporting button to show in situations where incident
// reporting is possible.

// Using the SupportNavigationFragment
mNavFragment.setReportIncidentButtonEnabled(true);

// Using the NavigationView
navigationView.setReportIncidentButtonEnabled(true);

Adicionar um botão de relatório personalizado

Em vez do botão de relatório de interrupção padrão, você pode adicionar um botão de relatório personalizado à interface de navegação. Quando o usuário clica no botão personalizado, você pode acionar a exibição do menu de relatório chamando o método showReportIncidentsPanel. Antes de adicionar um botão de relatório personalizado, verifique se o app está na navegação ativa e se o usuário está em um país em que os relatórios estão ativados chamando isIncidentReportingAvailable. Se uma dessas condições não for verdadeira, o menu de relatório não vai aparecer.

  Button customReportIncidentButton = findViewById(R.id.custom_reporting_button);
  
  // Check if reporting is available before displaying your button
  customReportIncidentButton.setVisibility(
      navigationView.isReportingAvailable ? View.VISIBLE : View.GONE);
  
  // Trigger the reporting flow if the button is clicked
  customReportIncidentButton.setOnClickListener(v ->
      navigationView.showReportIncidentsPanel());
  

Trabalhar com interfaces de navegação personalizadas

Se a implementação do SDK Navigation incluir elementos de interface personalizados, você precisará considerar os elementos de interrupção em tempo real para evitar conflitos.

Posicionamento do botão de relatório

Por padrão, o botão de relatório de interrupção é posicionado na extremidade inferior/canto final do mapa, no lado direito para idiomas da esquerda para a direita e no lado esquerdo para idiomas da direita para a esquerda. Se você precisar mover o botão de relatório para abrir espaço para elementos de interface personalizados, adicione um controle personalizado BOTTOM_END_BELOW ou FOOTER, que vai empurrar a posição do botão para cima na tela. Colocar suas próprias interfaces personalizadas nos controles personalizados também garante que todos os comandos mostrados pelo SDK Navigation sejam sobrepostos corretamente aos elementos de interface personalizados durante a exibição. Se você não conseguir usar controles personalizados, use a API Prompt Visibility para gerenciar possíveis conflitos de interface.

API Prompt Visibility (experimental)

A API Prompt Visibility ajuda a evitar conflitos entre elementos de interface gerados pelo SDK Navigation e seus próprios elementos de interface personalizados, adicionando um listener para receber um callback antes que um elemento de interface do SDK Navigation apareça e assim que o elemento for removido. Você pode receber callbacks para elementos de interrupção em tempo real, incluindo cards de informações, comandos e o menu de relatório de interrupção, bem como para outras notificações geradas pelo SDK Navigation.
// Sample listener
val listener: PromptVisibilityChangedListener = { isVisible ->
	if (isVisible) {
		customFab.visibility = false
		customFooter.visibility = false
		moveSomeOtherThingsAround()
	} else {
		customFab.visibility = true
		customFooter.visibility = true
		moveSomeThingsBackToWhereTheyWereBefore()
	}
}

// Inside onCreate()
navigationView.addPromptVisibilityChangedListener(listener)

// Inside onDestroy()
navigationView.removePromptVisibilityChangedListener(listener)