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

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

खास जानकारी

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

  • 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() कॉलबैक को ट्रिगर करता है.

सड़क से जुड़ी जगह की जानकारी के अपडेट, नेविगेशन से अलग होते हैं. ये अपडेट, नेविगेशन बंद होने के बाद भी जारी रह सकते हैं. जगह की जानकारी के अपडेट पाने की सुविधा चालू करने पर, बैटरी जल्दी खत्म हो सकती है, मेमोरी लीक हो सकती है या डिवाइस की जगह की जानकारी का डेटा अनजाने में इकट्ठा हो सकता है. ऐसा तब होता है, जब जगह की जानकारी के अपडेट पाने की सुविधा बैकग्राउंड में चालू रहती है. जब आपको लिसनर की ज़रूरत न हो, तब 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, HEAVY, MEDIUM, LIGHT या UNKNOWN में से कोई एक हो सकता है. यह 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 या NavigationFragment.addOnNightModeChangedListener पर कॉल करें.

यहां दिए गए उदाहरण में, नेविगेशन फ़्रैगमेंट पर नाइट मोड में होने वाले बदलावों को सुनने का तरीका बताया गया है.

mNavFragment.addOnNightModeChangedListener(new NavigationView.OnNightModeChangedListener() {
    @Override
    public void onNightModeChanged(NightModeChangedEvent nightModeChangedEvent) {
        displayMessage("Night mode is active: " + nightModeChangedEvent.inNightMode(),
        DISPLAY_LOG);
    }
});

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