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

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

खास जानकारी

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

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

कोड देखना

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

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

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

continueToNextDestination() बोलने पर, नेविगेटर पिछले डेस्टिनेशन की सभी जानकारी मिटा देता है. अगर आपको रास्ते के पिछले सेगमेंट की जानकारी का विश्लेषण करना है, तो continueToNextDestination() को कॉल करने से पहले, नेविगेटर से जानकारी हासिल करनी होगी.

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

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

रास्ता बदलने पर, नेविगेशन SDK, onRouteChanged() कॉलबैक को ट्रिगर करता है. नया रास्ता ढूंढने के लिए, Navigator.getRouteSegments और Navigator.getCurrentRouteSegment() को कॉल किया जा सकता है.

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

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