नेविगेशन इवेंट के लिए सुनें

जब उपयोगकर्ता किसी रास्ते पर नेविगेट करता है, तब आपका ऐप्लिकेशन उन इवेंट को सुन सकता है.

खास जानकारी

नेविगेशन इवेंट सुनने के लिए, नीचे दिए गए इंटरफ़ेस का इस्तेमाल करें:

  • Navigator.ArrivalListener, onArrival() कॉलबैक की सुविधा देता है, जो डिवाइस के किसी डेस्टिनेशन पर पहुंचने पर ट्रिगर होता है.
  • RoadSnappedLocationProvider.LocationListener, onLocationChanged() कॉलबैक देता है, जो डिवाइस की जगह की जानकारी में बदलाव होने पर ट्रिगर होता है.
  • Navigator.RemainingTimeOrDistanceChangedListener, onRemainingTimeOrDistanceChanged() कॉलबैक की सुविधा देता है. यह तब ट्रिगर होता है, जब अगली डेस्टिनेशन के लिए, समय या दूरी में एक तय संख्या से ज़्यादा का बदलाव होता है.
  • Navigator.RouteChangedListener, onRouteChanged() कॉलबैक देता है, जो रूट बदलने पर ट्रिगर होता है.

कोड देखें

मंज़िल पर पहुंचने के समय का पता लगाएं

यहां, गंतव्य का मतलब आखिरी मंज़िल या वेपॉइंट से है. पहुंचने का पता लगाने के लिए, Navigator.addArrivalListener() को कॉल करें. डिवाइस के डेस्टिनेशन पर पहुंचने पर, यह कॉलबैक के लिए रजिस्टर होता है.

पहुंचने पर, Android के लिए नेविगेशन 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 services के लोकेशन एपीआई में, कई तरह से जांची गई जगह की जानकारी देने वाले ने दी है.

नेविगेशन SDK टूल ज़्यादा से ज़्यादा बार जगह की जानकारी के अपडेट देता है. जगह की जानकारी का अपडेट उपलब्ध होने पर, नेविगेशन 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() को कॉल करें.

जब समय या दूरी में बदलाव तय संख्या से ज़्यादा हो जाता है, तो नेविगेशन SDK टूल onRemainingTimeOrDistanceChanged() कॉलबैक को ट्रिगर करता है.

बचा हुआ समय और दूरी जानने के लिए, Navigator.getTimeAndDistanceList() पर कॉल करें. ध्यान दें कि सूची में समय और दूरी कुल हैं: वे वर्तमान स्थान से हर वेपॉइंट तक का समय और दूरी दिखाते हैं, न कि एक वेपॉइंट से दूसरे तक. TimeAndDistance ऑब्जेक्ट अब delaySeverity भी दिखाता है. यह ईनम भारी, मध्यम, हल्का या अज्ञात होगा. यह उस रंग से मेल खाता है जो आपको मैप के यूज़र इंटरफ़ेस (यूआई) में 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() तरीके का इस्तेमाल करके, एक से ज़्यादा वेपॉइंट के लिए ETA भी दिखाए जा सकते हैं.

रास्ते के अपडेट पाएं

रूट बदलने पर कॉलबैक रजिस्टर करने के लिए, Navigator.addRouteChangedListener() को कॉल करें.

रास्ता बदलने पर, नेविगेशन SDK टूल onRouteChanged() कॉलबैक को ट्रिगर करता है. नया रास्ता खोजने के लिए, Navigator.getRouteSegments और Navigator.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);
    }
});