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

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

खास जानकारी

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

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

कोड देखना

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

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

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

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

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