탐색 이벤트 리슨

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

개요

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

코드 보기

목적지 도착 감지

여기서 목적지는 최종 목적지 또는 경유지를 의미합니다. 받는사람 도착을 감지하고 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();
        }
    }
});

위치 업데이트 받기

RoadSnappedLocationProvider를 가져옵니다. NavigationApi 후 호출 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() Note that the 목록에 있는 시간과 거리는 누적됩니다. 즉, 시간과 거리가 한 경유지에서 다른 경유지로 이동하는 것이 아니라 현재 위치에서 각 경유지까지 이동하는 것입니다. 이제 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);
    }
});