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

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

खास जानकारी

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

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

कोड देखना

किसी जगह पर पहुंचने का पता लगाना

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

जगह पर पहुंचने के बाद, Android के लिए Navigation SDK टूल, onArrival() कॉलबैक को ट्रिगर करता है. इसका इस्तेमाल, Navigator.stopGuidance() का इस्तेमाल करके बारी-बारी से मिलने वाले निर्देशों को रोकने या Navigator.continueToNextDestination() का इस्तेमाल करके अगले वेपॉइंट पर जाने के लिए किया जा सकता है. अगर नेविगेशन सेशन में सिर्फ़ एक डेस्टिनेशन शामिल किया गया है या डेस्टिनेशन की सूची में कोई डेस्टिनेशन नहीं बचा है, तो Navigator.continueToNextDestination() को कॉल करने पर, दिशा-निर्देश अपने-आप बंद हो जाते हैं.

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 के लोकेशन एपीआई में फ़्यूज़्ड लोकेशन प्रोवाइडर से मिली जगह की जानकारी से अलग हो सकती है.

Navigation SDK टूल, लोकेशन की जानकारी को ज़्यादा से ज़्यादा बार अपडेट करता है. जगह की जानकारी का अपडेट उपलब्ध होने पर, Navigation SDK onLocationChanged() कॉलबैक को ट्रिगर करता है.

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

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

नाइट मोड को प्रोग्राम के हिसाब से भी सेट किया जा सकता है. ज़्यादा जानकारी के लिए, नाइट मोड सेट करना लेख पढ़ें.