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

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

खास जानकारी

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

  • 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 दिखाता है. यह ईनम भारी, मध्यम, हल्की या अज्ञात होगी. यह उस रंग से मेल खाता है जो आपको मैप के यूज़र इंटरफ़ेस (यूआई) में टीटा पर दिखता है (भारी = लाल, मीडियम = पीला, हल्का = हरा). अगर आपको अपना ईटा फ़ुटर बनाने की ज़रूरत है, तो यह सुविधा आपके लिए मददगार होगी.

मेमोरी लीक से बचने के लिए, जब आपको लिसनर की ज़रूरत न हो, तब आपको 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);
    }
});