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 denunciem e verifiquem as interrupções encontradas. Exemplos de interrupções incluem acidentes de veículos, congestionamento, 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 deles, 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 principal de navegação:- Indicações interativas de interrupções ao longo das rotas.
- Alertas automáticos de interrupção com votação durante a navegação ativa.
- Relatório de interrupções durante a navegação ativa.
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.
Destaques interativos de interrupções ao longo dos trajetos
Quando um app mostra um trajeto, seja em uma visão geral ou durante a navegação ativa, as interrupções atuais aparecem como indicadores ao longo do trajeto. Quando você ativa a camada de trânsito, as interrupções fora da rota também aparecem no mapa. As frases de destaque incluem um ícone que indica o tipo de interrupção.
É possível controlar a exibição de alertas 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 um destaque
Ao tocar em um alerta de interrupção, um card de informações é aberto com mais detalhes. Isso se aplica a indicadores de rota e fora da rota, mas os indicadores fora da rota só aparecem se a camada de trânsito estiver ativada. O card mostra o tipo de interrupção, a hora em que ela foi informada pela última vez e, às vezes, uma opção para votar se a interrupção 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 de destaque nas visões gerais do trajeto, antes de iniciar a navegação ativa
Antes de iniciar a navegação ativa, os usuários podem tocar em um destaque no mapa ou no panorama do trajeto para abrir um card de informações. As indicações fora da rota exigem que a camada de trânsito esteja ativada. O card de informações fornece mais detalhes sobre a interrupção.
Você pode controlar a capacidade dos usuários de tocar nas indicações de interrupção nas visões gerais de rotas 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 alerta de interrupção no trajeto ou fora dele para abrir um card de informações. O card mostra o tipo de interrupção e a última hora informada, além de incluir botões para que os usuários votem 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 interdições de vias. O Google processa esses votos para ajudar a determinar se a interrupção deve continuar sendo mostrada. Os votos também podem aparecer no mapa para outros usuários do SDK do Google Maps e Navigation.
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 das rotas 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 automáticos 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, uma solicitação aparece 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 SDK do Google Maps e Navigation, além de serem usados para determinar se a interrupção deve continuar sendo mostrada.
É possível configurar a exibição de solicitações de alerta durante a navegação ativa usando
setTrafficPromptsEnabled
, que também controla a exibição
de balões de texto ao longo das rotas.
// Using the SupportNavigationFragment mNavFragment.setTrafficPromptsEnabled(true); // Using the NavigationView navigationView.setTrafficPromptsEnabled(true);
Alertas 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 possam informar 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 denúncia aparece. Os alertas enviados pelos usuários são processados pelo Google e podem aparecer no mapa para outros usuários do SDK Navigation e do Google Maps.
Ao informar o fechamento de uma via, uma rota alternativa pode ser apresentada para evitar o trecho bloqueado, pedindo que o usuário confirme ou negue o novo trajeto. Esse recurso está sujeito à disponibilidade.
Mostrar ou ocultar o botão de relatórios padrão
É possível configurar a visibilidade do botão de relatórios 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órios personalizados
Em vez do botão padrão de relatórios de interrupção, você pode adicionar um botão personalizado à interface de navegação. Quando o usuário clica no botão personalizado, você pode acionar a exibição do menu de relatórios
chamando o método showReportIncidentsPanel. Antes de adicionar um botão de denúncia personalizada, verifique se o app está em navegação ativa e se o usuário está em um país onde a denúncia está ativada chamando isIncidentReportingAvailable. Se uma dessas condições não for atendida, o menu de relatórios 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, 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 denúncia de interrupção fica na parte de baixo/canto final do mapa, à direita para idiomas da esquerda para a direita e à esquerda para idiomas da direita para a esquerda. Se você precisar mover o botão de denúncia para abrir espaço para elementos de interface personalizados, adicione um controle personalizadoBOTTOM_END_BELOW ou FOOTER, que vai empurrar a
posição do botão para cima na tela. Colocar suas próprias UIs personalizadas nos controles personalizados
também garante que todos os comandos mostrados pelo SDK Navigation sejam sobrepostos corretamente aos seus
elementos de UI personalizados enquanto são exibidos. 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 elementos de interface gerados pelo SDK Navigation e seus próprios elementos de interface personalizados. Para isso, ela adiciona 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, solicitações e o menu de denúncia de interrupções, além de 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)