탐색 이벤트 리슨

앱에서 사용자가 경로를 따라 이동할 때 발생하는 이벤트를 수신할 수 있습니다.

개요

다음 인터페이스를 사용하여 탐색 이벤트를 수신합니다.

코드 보기

목적지 도착 감지

여기서 목적지는 최종 목적지 또는 경유지를 의미합니다. 도착을 감지하려면 기기가 목적지에 도달할 때 콜백을 등록하는 Navigator.addArrivalListener()를 호출합니다.

도착하면 Android용 Navigation SDK가 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();
        }
    }
});

위치 업데이트 받기

NavigationApi에서 RoadSnappedLocationProvider를 가져온 다음 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도 반환합니다. 이 enum은 무거움, 중간, 가벼움 또는 알 수 없음 중 하나입니다. 지도 UI의 ETA에 표시되는 색상 (굵은 색 = 빨간색, 중간 = 노란색, 밝은 색 = 녹색)에 해당합니다. 이는 자체 도착 예정 시간 바닥글을 만들어야 하는 경우에 유용합니다.

메모리 누수를 방지하려면 리스너가 더 이상 필요하지 않을 때 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.addOnNightModeChangedListener 또는 SupportNavigationFragment.addOnNightModeChangedListener를 호출하여 야간 모드가 변경될 때 콜백을 등록합니다.

다음 예는 탐색 프래그먼트에서 야간 모드 변경사항을 수신 대기하는 방법을 보여줍니다.

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