탐색 이벤트 리슨

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

개요

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

코드 보기

목적지 도착 감지

여기서 목적지는 최종 목적지 또는 경유지를 의미합니다. 도착을 감지하려면 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 서비스 위치 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에 표시되는 색상 (무거움 = 빨간색, 중간 = 노란색, 밝은 색 = 녹색)에 해당합니다. 이 기능은 자체 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);
    }
});