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 que encontram. Exemplos de interrupções incluem acidentes de veículos, congestionamentos, presença de policiais e radares de velocidade, obras, faixas interditadas e certas condições climáticas. Nesta página, explicamos 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 do 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.

Balões interativos de interrupção ao longo dos trajetos

Quando um app mostra um trajeto, seja em um panorama do trajeto ou durante a navegação ativa, as interrupções atuais aparecem como balões ao longo do trajeto. Quando você ativa a camada de trânsito, as interrupções fora do trajeto também aparecem no mapa. As frases de destaque incluem um ícone que indica o tipo de interrupção.

Balões de texto ao longo de rotas

É possível controlar a exibição de avisos de interrupção ao longo dos trajetos usando setTrafficPromptsEnabled, que também controla a exibição de alertas automáticos 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 tocar em um aviso

Toque em um aviso de interrupção para abrir um card de informações com mais detalhes. Isso se aplica a textos explicativos no trajeto e fora dele, mas os textos explicativos fora do trajeto só aparecem se a camada de trânsito estiver ativada. O card mostra o tipo de interrupção, o horário em que foi relatada pela última vez e, às vezes, uma opção para votar se ela ainda está presente. O tipo de card de informações e as opções de configuração variam dependendo se o usuário está em navegação ativa.

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

Antes de iniciar a navegação ativa, os usuários podem tocar em um aviso no trajeto ou fora dele no mapa ou no panorama do trajeto para abrir um card de informações. As indicações fora do trajeto exigem que a camada de trânsito esteja ativada. O card de informações mostra mais detalhes sobre a interrupção.

Card de informações gerais

Você pode controlar a capacidade dos usuários de tocar em indicações de interrupção nos panoramas 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 destaque durante a navegação ativa

Durante a navegação ativa, os usuários podem tocar em um aviso de interrupção no trajeto ou fora dele para abrir um card de informações. O card mostra o tipo de interrupção e o horário do último relato, além de incluir botões para os usuários votarem se a interrupção ainda está presente.

A votação está disponível para interrupções no trajeto e fora dele em um raio de 5 km do usuário, exceto vias interditadas. O Google processa esses votos para determinar se deve continuar mostrando a interrupção. Os votos também podem aparecer no mapa para outros usuários do Google Maps e do SDK de navegação.

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

Você pode controlar a exibição e a capacidade de tocar nas indicações de interrupção durante a navegação ativa usando setTrafficPromptsEnabled, que também controla a exibição de indicações ao longo dos trajetos e a exibição de alertas automáticos quando um usuário se aproxima de uma interrupção.

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

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

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

Durante a navegação ativa, quando um usuário se aproxima de uma interrupção em um trajeto, aparece uma solicitação com informações sobre a interrupção e botões para votar se ela 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 de navegação, além de serem usados para determinar se a interrupção deve continuar sendo mostrada.

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

É possível configurar a exibição de avisos de alerta durante a navegação ativa usando setTrafficPromptsEnabled, que também controla a exibição de balões de texto ao longo dos trajetos.

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

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

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

Durante o modo de navegação ativa, um botão aparece na interface de navegação para 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 é exibido. Os alertas 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.

Informar uma via interditada pode apresentar um trajeto alternativo para contornar o trecho bloqueado, solicitando que o usuário confirme ou negue o novo trajeto. Esse recurso está sujeito à disponibilidade.

Botão de denúncia Menu Alertas

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

É possível configurar a visibilidade do botão de denúncia 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 padrão de relatório de interrupção, é possível adicionar um botão de relatório personalizado à interface de navegação. Quando o usuário clica no botão personalizado, é possível acionar a exibição do menu de alertas chamando o método showReportIncidentsPanel. Antes de adicionar um botão de relatório personalizado, verifique se o app está no modo de navegação ativa e se o usuário está em um país onde os relatórios estão ativados chamando isIncidentReportingAvailable. Se uma dessas condições não for atendida, o menu de alertas 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 de Navigation incluir elementos da interface personalizados, considere os elementos de interrupção em tempo real para evitar conflitos.

Posicionamento do botão de denúncia

Por padrão, o botão de relatório de interrupção fica no canto inferior/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 denúncia para abrir espaço para elementos da 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 as solicitações mostradas pelo SDK do Navigation sejam devidamente sobrepostas aos seus elementos da interface personalizados enquanto são exibidas. Se não for possível 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 os elementos da interface gerados pelo SDK do Navigation e os elementos personalizados da interface. Para isso, ela adiciona um listener para receber um callback antes que um elemento da interface do SDK do Navigation apareça e assim que ele for removido. Você pode receber callbacks para elementos de interrupção em tempo real, incluindo cards de informações, solicitações e o menu de alertas de interrupção, além de outras notificações geradas pelo SDK de navegação.
// 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)