Configurar alertas do velocímetro

Quando a navegação está ativada, o SDK do Navigation para Android mostra um controle de limite de velocidade no canto inferior esquerdo do mapa com o limite atual. Se um motorista exceder o limite de velocidade, o controle vai se expandir para mostrar um velocímetro ao lado da tela do limite de velocidade e acionar alertas quando a velocidade atingir um determinado limite.

Por padrão, o SDK do Navigation aciona um pequeno alerta de velocidade quando o motorista excede o limite de velocidade em 10 km/h e muda a cor do texto do velocímetro para vermelho. Ele aciona um grande alerta de velocidade quando o motorista excede o limite de velocidade em 20 km/h e muda a cor de fundo do velocímetro para vermelha.

Você pode personalizar o limite para acionar os alertas e as cores de texto e de plano de fundo exibidas pelo velocímetro. Você também pode usar o SDK do Navigation para disponibilizar as informações de velocidade do motorista de acordo com os limites definidos. Por exemplo, é possível disponibilizar informações sobre velocidade para os operadores de transporte por aplicativo a fim de incentivar os motoristas a respeitar o limite de velocidade e melhorar a segurança.

Personalize os limites dos alertas de velocidade

É possível personalizar o limite dos alertas de velocidade principais e secundários como uma porcentagem acima do limite da velocidade atual. Você também pode especificar por quanto tempo o limite é excedido antes que o mapa exiba o alerta.

O exemplo de código a seguir define o limite de um alerta de velocidade secundária como 5% acima do limite e o limite de um alerta de velocidade principal como 10% acima do limite. Ele especifica que o mapa exibe um alerta depois que um limite de alerta for excedido por cinco segundos.

float minorSpeedAlertThresholdPercentage = 5;
float majorSpeedAlertThresholdPercentage = 10;
double severityUpgradeDurationSeconds = 5;

// Configure SpeedAlertOptions
SpeedAlertOptions.Builder speedAlertOptionsBuilder = new SpeedAlertOptions.Builder();
speedAlertOptionsBuilder.setSpeedAlertThresholdPercentage(
    SpeedAlertSeverity.MINOR, minorSpeedAlertThresholdPercentage);
speedAlertOptionsBuilder.setSpeedAlertThresholdPercentage(
    SpeedAlertSeverity.MAJOR, majorSpeedAlertThresholdPercentage);
 speedAlertOptionsBuilder.setSeverityUpgradeDurationSeconds(severityUpgradeDurationSeconds);

// Set SpeedAlertOptions to Navigator.
navigator.setSpeedAlertOptions(speedAlertOptionsBuilder.build());

Personalize como o velocímetro mostra alertas de velocidade

Para tornar os alertas de velocidade mais chamativos, personalize as cores da tela do velocímetro para cada nível de alerta.

A tabela abaixo mostra as cores padrão dos alertas de velocidade na classe NavigationView:

ElementoCor
MinorSpeedAlertBackgroundColorDayMode 0xffffff(branco)
MinorSpeedAlertBackgroundColorNightMode 0x000000
MinorSpeedAlertTextColorDayMode 0xd93025
MinorSpeedAlertTextColorNightMode 0xd93025
MajorSpeedAlertBackgroundColorDayMode 0xd93025
MajorSpeedAlertBackgroundColorNightMode 0xd93025
MajorSpeedAlertTextColorDayMode 0xffffff(branco)
MajorSpeedAlertTextColorNightMode 0xffffff(branco)

Você pode especificar a cor do texto e do plano de fundo do velocímetro para alertas de velocidade menor e principal:

SpeedometerUiOptions speedometerUiOptions =
        new SpeedometerUiOptions.Builder()
            .setBackgroundColorDayMode(MINOR, some_color)
            .setBackgroundColorNightMode(MINOR, some_color)
            .setTextColorDayMode(MINOR, some_color)
            .setTextColorNightMode(MINOR, some_color)
            .setBackgroundColorDayMode(MAJOR, some_color)
            .setBackgroundColorNightMode(MAJOR, some_color)
            .setTextColorDayMode(MAJOR, some_color)
            .setTextColorNightMode(MAJOR, some_color)
            .build();

// Set SpeedometerUiOptions to NavigationView.
navigationView.setSpeedometerUiOptions(speedometerUiOptionsBuilder.build());
navigationView.setSpeedometerEnabled(true);

// Set SpeedometerUiOptions to SupportNavigationFragment.
supportNavigationFragment.setSpeedometerUiOptions(speedometerUiOptionsBuilder.build());
supportNavigationFragment.setSpeedometerEnabled(true);

Receber informações de velocidade dos motoristas

Caso seu aplicativo exija o compartilhamento de informações sobre a velocidade do motorista, você também pode usar o SDK do Navigation para disponibilizar essas informações. Isso pode ser útil para aplicativos de transporte por aplicativo em que um operador quer monitorar o excesso de velocidade dos motoristas para aumentar a segurança. Isso também pode ser feito sem a necessidade de renderizar uma visualização de navegação para o usuário no seu app.

Por exemplo, o exemplo a seguir compartilha informações de velocidade quando ela está em uma porcentagem específica acima do limite:

// Existing flow for creating Navigator.
NavigationApi.getNavigator();

// Set the SpeedAlertOptions for the MAJOR and MINOR alerts. (Note that the
// severityUpgradeDurationSeconds field is by design not used in this flow.)
SpeedAlertOptions speedAlertOptions = ...;
navigator.setSpeedAlertOptions(speedAlertOptions);

// Implement SpeedingListener.
SpeedingListener speedingListener = new SpeedingListener() {
  @Override
  public void onSpeedingUpdated(float percentageAboveLimit, SpeedAlertSeverity speedAlertSeverity) {
  ...
  }
};

// Set speedingListener to Navigator.
navigator.setSpeedingListener(speedingListener);