監聽導覽事件

您的應用程式可監聽使用者沿路線導航時發生的事件。

總覽

請使用下列介面監聽導覽事件:

查看程式碼

偵測抵達目的地

此處的目的地是指最終目的地或路線點。目的地: 偵測抵達情形,請呼叫 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();
        }
    }
});

接收位置更新資訊

RoadSnappedLocationProvider NavigationApi,然後呼叫 RoadSnappedLocationProvider.addLocationListener() 註冊於裝置的位置或標題變更時登錄的回呼。 請注意,這個位置與道路有關,因此可能與道路不同 Google Play 整合式位置預測提供工具傳回的位置 服務 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 上 (粗體 = 紅色,中型 = 黃色,淺度 = 綠色)。這是 如果需要建立自己的浮動式訊息

為避免記憶體流失,請務必呼叫 Navigator.removeRemainingTimeOrDistanceChangedListener(listener) 當您不需要事件監聽器時

以下範例要求如果剩餘的時間變更幅度超過 60 秒或者剩餘距離變化超過 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.addOnNightModeChangedListenerSupportNavigationFragment.addOnNightModeChangedListener 註冊在夜間模式變更時註冊回呼。

以下範例顯示監聽裝置的夜間模式變更 導覽片段。

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