ナビゲーション イベントをリッスンする

アプリは、ユーザーがルートに沿って移動する際に発生するイベントをリッスンできます。

概要

ナビゲーション イベントをリッスンするには、次のインターフェースを使用します。

コードの確認

目的地の到着を検出する

ここでいう目的地とは、最終目的地またはウェイポイントを指します。宛先 到着の検出、Navigator.addArrivalListener() の呼び出し、 デバイスがデスティネーションに到達したときのコールバックを登録します。

アクセスすると、Navigation SDK for Android が起動されます。 onArrival() コールバックを呼び出して、ターンバイターン方式の案内を停止します。 この関数を明示的に呼び出す必要があります。 Navigator.continueToNextDestination() で次に進む 次のウェイポイント、Navigator.startGuidance()、 ターンバイターン方式ナビを続行します。

continueToNextDestination() を呼び出すと、ナビゲータはすべてのデータを 前のデスティネーションに関する情報が表示されます。分析と 前のルート セグメントに関する情報を取得するには、 ナビゲーションから continueToNextDestination() を呼び出す必要があります。

メモリリークを回避するため、リソース使用率が低いときに removeArrivalListener(listener) を リスナーが不要になります

mNavigator.addArrivalListener(new Navigator.ArrivalListener() {
    @Override
    public void onArrival(ArrivalEvent arrivalEvent) {
        displayMessage("onArrival: You've arrived at a waypoint: "
                + mNavigator.getCurrentRouteSegment().getDestinationWaypoint().getTitle(),
                DISPLAY_BOTH);
        // Start turn-by-turn guidance for the next leg of the route.
        if (arrivalEvent.isFinalDestination()) {
            displayMessage("onArrival: You've arrived at the final destination.",
                    DISPLAY_BOTH);
        } else {
            mNavigator.continueToNextDestination();
            mNavigator.startGuidance();
        }
    }
});

位置情報の更新データを受信する

RoadSnappedLocationProviderNavigationApi の後に呼び出します。 RoadSnappedLocationProvider.addLocationListener() を使用して、デバイスの位置や方角が変化したときのコールバックを登録します。 この場所は道路にスナップされているため、 Google Play で Fused Location Provider から返された位置情報 Location API です

Navigation SDK は、可能な限り頻繁に位置情報の更新を提供する。 考えています位置情報の更新が利用可能な場合、 Navigation SDK が onLocationChanged() コールバック。

道路のスナップされた位置情報の更新はナビゲーションとは無関係であり、 ナビゲーションを停止した後も続行できます。位置情報の更新を登録すると バッテリーの消耗、メモリリーク、デバイスの位置情報の意図しない収集を引き起こす 位置情報の更新をバックグラウンドで実行したままにしている場合は、発信 RoadSnappedLocationProvider.removeLocationListener リスナーが不要になった場合です

mRoadSnappedLocationProvider =
        NavigationApi.getRoadSnappedLocationProvider(getApplication());
if (mRoadSnappedLocationProvider != null) {
    mRoadSnappedLocationProvider.addLocationListener(
            new RoadSnappedLocationProvider.LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    displayMessage("onLocationUpdated: Navigation engine has provided a new"
                                    + " road-snapped location: "
                                    + location.toString(),
                            DISPLAY_LOG);
                }
            });
} else {
    displayMessage("ERROR: Failed to get a location provider", DISPLAY_LOG);
}

時刻と距離の最新情報を受け取る

Navigator.addRemainingTimeOrDistanceChangedListener() を呼び出す の残り時間(秒)または距離が決まったらコールバックを (メートル)の変化が特定のしきい値を超えた場合に、通知が送られます。

時間または距離の変化が指定量を超えると、 Navigation SDK が onRemainingTimeOrDistanceChanged() 呼び出すことができます。

残りの時間と距離を確認するには、 Navigator.getTimeAndDistanceList()。なお、 リスト内の時間と距離は累積値です。つまり、時間と距離が ある地点から別の地点へとではなく TimeAndDistance オブジェクトも delaySeverity を返すようになりました。この列挙型は 重い、中間的な、軽い、不明のいずれかです。これは、選択した色 マップ UI の ETA を参照(重い = 赤、中 = 黄色、明るい = 緑)。これは、 独自の ETA フッターを作成する場合に便利です。

メモリリークを回避するには、Terraform で Navigator.removeRemainingTimeOrDistanceChangedListener(listener) リスナーが不要になった場合です

以下のサンプルでは、残り時間が または、残りの距離が 100 メートル以上変化した場合。

mNavigator.addRemainingTimeOrDistanceChangedListener(60, 100,
        new Navigator.RemainingTimeOrDistanceChangedListener() {
            @Override
            public void onRemainingTimeOrDistanceChanged() {
                displayMessage("onRemainingTimeOrDistanceChanged: Time or distance estimate"
                        + " has changed.",
                        DISPLAY_LOG);
            }
        });

組み込みの setEtaCardEnabled() メソッドを使用して表示する 値 TRUE を持つパラメータを渡します。時間や距離を抑制する FALSE に設定します。

また、 getTimeAndDistanceList() メソッドを使用します。

ルートの更新を受信する

Navigator.addRouteChangedListener() を呼び出すと、 ルート変更時のコールバックを登録します。

ルートが変更されると、Navigation SDK によって onRouteChanged() コールバック。 Navigator.getRouteSegmentsNavigator.getCurrentRouteSegment(): 新しい あります

メモリリークを回避するため、リソース使用率が低いときに removeRouteChangedListener(listener) を リスナーが不要になります

mNavigator.addRouteChangedListener(new Navigator.RouteChangedListener() {
    @Override
    public void onRouteChanged() {
        displayMessage("onRouteChanged: The driver's route has changed. Current waypoint: "
                + mNavigator.getCurrentRouteSegment().getDestinationWaypoint().getTitle(),
                DISPLAY_LOG);
    }
});

夜間モードの変更を検出する

NavigationView.addOnNightModeChangedListener を呼び出すか、 SupportNavigationFragment.addOnNightModeChangedListener 夜間モードが変更されたときのコールバックを登録します。

次の例は、デバイスで夜間モードの変更をリッスンする例です。 追加します。

mNavFragment.addOnNightModeChangedListener(new NavigationView.OnNightModeChangedListener() {
    @Override
    public void onNightModeChanged(NightModeChangedEvent nightModeChangedEvent) {
        displayMessage("Night mode is active: " + nightModeChangedEvent.inNightMode(),
        DISPLAY_LOG);
    }
});