スピードメーターのアラートを設定する

ナビゲーションを有効にすると、Navigation SDK for Android の地図の左下に現在の制限速度を示す速度制限コントロールが表示されます。ドライバーが制限速度を超えると、コントロールが展開されて制限速度ディスプレイの横に速度計が表示され、速度が特定のしきい値に達するとアラートがトリガーされます。

デフォルトでは、ドライバーが制限速度を 5 マイル(10 km)以上超えると、Navigation SDK は軽微な速度アラートをトリガーし、速度計のテキストの色を赤に変更します。ドライバーが制限速度を時速 10 マイル(20 km)を超えると、メジャー速度アラートをトリガーし、速度計の背景色を赤色に変更します。

アラートをトリガーするしきい値と、スピードメーターに表示されるテキストと背景色をカスタマイズできます。また、Navigation SDK を使用して、設定したしきい値に応じたドライバーの速度情報を利用することもできます。たとえば、ライドシェアのオペレーターが速度情報を閲覧できるようにして、ドライバーが制限速度を遵守して安全性を向上させるよう促すことができます。

速度アラートのしきい値をカスタマイズする

マイナーとメジャーの両方の速度アラートの速度アラートのしきい値を、現在の速度の上限を超える割合でカスタマイズできます。また、しきい値を超えてから地図にアラートを表示するまでの時間を指定することもできます。

次のコード例では、マイナー速度アラートのしきい値を速度上限の 5% に設定し、メジャー速度アラートのしきい値を速度上限の 10% に設定しています。アラートのしきい値を 5 秒間超えた後に地図にアラートを表示するよう指定します。

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());

速度計での速度アラートの表示方法をカスタマイズする

速度アラートの視認性を高めるには、アラートレベルごとに速度計の表示色をカスタマイズします。

次の表に、NavigationView クラスの速度アラートのデフォルトの色を示します。

要素
MinorSpeedAlertBackgroundColorDayMode 0xffffff(白)
MinorSpeedAlertBackgroundColorNightMode 0x000000
MinorSpeedAlertTextColorDayMode 0xd93025
MinorSpeedAlertTextColorNightMode 0xd93025
MajorSpeedAlertBackgroundColorDayMode 0xd93025
MajorSpeedAlertBackgroundColorNightMode 0xd93025
MajorSpeedAlertTextColorDayMode 0xffffff(白)
MajorSpeedAlertTextColorNightMode 0xffffff(白)

マイナーとメジャーの両方の速度アラートに、速度計のテキストと背景色を指定できます。

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);

ドライバーから速度情報を受け取る

アプリでドライバーの速度に関する情報を共有する必要がある場合は、Navigation SDK を使用してドライバーの速度情報を利用することもできます。これは、オペレーターがドライバーによる過度のスピード速度をモニタリングして安全を強化するライドシェア アプリケーションで役立ちます。これは、アプリ内でユーザーにナビゲーション ビューをレンダリングせずに行うこともできます。

たとえば、次の例では、速度が速度制限を指定された割合を超えた場合に、速度情報を共有します。

// 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);