האזנה לאירועי ניווט

האפליקציה יכולה להאזין לאירועים שמתרחשים בזמן שהמשתמש מנווט במסלול.

סקירה כללית

אפשר להשתמש בממשקים הבאים כדי להאזין לאירועי ניווט:

להצגת הקוד

זיהוי הגעה ליעד

כאן, יעד מתייחס ליעד סופי או לציון דרך. שפת תרגום זיהוי הגעה, התקשרות Navigator.addArrivalListener(), שנרשם לקריאה חוזרת (callback) כשהמכשיר מגיע ליעד.

עם ההגעה, ערכת ה-SDK לניווט ל-Android תופעל הקריאה החוזרת (callback) של onArrival() ומפסיקה את ההדרכה המפורטת. צריך לקרוא באופן מפורש Navigator.continueToNextDestination() כדי להתקדם עד ציון הדרך הבא, ואז Navigator.startGuidance() להמשיך בניווט מסלול מפורט.

כשתתבצע קריאה למספר continueToNextDestination(), הניווט ימחק את כל הפריטים מידע על היעד הקודם. אם רוצים לנתח מידע על קטע הנתיב הקודם, צריך לאחזר את המידע מניווט לפני קריאה אל continueToNextDestination().

כדי למנוע דליפות זיכרון, צריך להפעיל את הפונקציה removeArrivalListener(listener) צריכים את ה-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 למיקום של שירותים.

ה-SDK לניווט מספק עדכוני מיקום בתדירות שבה ככל האפשר. כשיש עדכון מיקום זמין, SDK לניווט מפעיל את onLocationChanged() קריאה חוזרת (callback).

עדכוני מיקומים שנקלטו בכביש אינם תלויים בניווט, ויכול להיות להמשיך גם אחרי שהניווט הופסק. הרשמה לקבלת עדכוני מיקום עשויה לגרום להתרוקנות הסוללה, לדליפת זיכרון או לאיסוף לא מכוון של מיקום המכשיר אם משאירים את עדכוני המיקום פועלים ברקע. שיחת טלפון 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() כדי להירשם להתקשרות חזרה כזמן שנותר (בשניות) או למרחק שנשאר (במטרים) משתנה ביותר מסף נתון.

כשהשינוי בזמן או במרחק יחרוג מהסכום שצוין, SDK לניווט מפעיל את onRemainingTimeOrDistanceChanged() קריאה חוזרת.

כדי למצוא את הזמן שנותר ואת המרחק שנותר, התקשר Navigator.getTimeAndDistanceList() שימו לב הזמנים והמרחקים ברשימה הם מצטברים: הם מראים את הזמן והמרחק מהמיקום הנוכחי לכל ציון דרך, לא מנקודת ציון אחת לאחרת. האובייקט TimeAndDistance מחזיר עכשיו גם את delaySeverity. 'טיפוסים בני מנייה (enum)' הזה כבד, בינוני, קל או לא ידוע. הוא תואם לצבע לראות ב-eta בממשק המשתמש של המפות (כבד = אדום, בינוני = צהוב, בהיר = ירוק). הדבר שימושי אם אתם צריכים ליצור כותרת תחתונה משלכם.

כדי למנוע דליפות זיכרון, צריך לקרוא Navigator.removeRemainingTimeOrDistanceChangedListener(listener) כשאתם כבר לא צריכים את המאזינים.

בדוגמה הבאה נשלחת בקשה לקריאה חוזרת (callback) אם הזמן שנותר משתנה ביותר מ- 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. כדי להסתיר את הזמן או המרחק display, צריך להגדיר את הערך הזה ל-FALSE.

אפשר גם לחשוף את זמן ההגעה המשוער לכמה ציוני דרך באמצעות getTimeAndDistanceList().

קבלת עדכונים לגבי המסלול

חיוג למספר Navigator.addRouteChangedListener() אל להירשם להתקשרות חזרה כשהמסלול משתנה.

כשהמסלול משתנה, SDK לניווט מפעיל את onRouteChanged() קריאה חוזרת (callback). אפשר להתקשר Navigator.getRouteSegments ו- Navigator.getCurrentRouteSegment() כדי למצוא את מסלול.

כדי למנוע דליפות זיכרון, צריך להפעיל את הפונקציה removeRouteChangedListener(listener) צריכים את ה-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);
    }
});