নেভিগেশন ইভেন্টের জন্য শুনুন

ব্যবহারকারী যখন কোনো পথ ধরে এগিয়ে যান, তখন ঘটা ইভেন্টগুলো আপনার অ্যাপ শুনতে পারে।

সংক্ষিপ্ত বিবরণ

ন্যাভিগেশন ইভেন্ট শোনার জন্য নিম্নলিখিত ইন্টারফেসগুলো ব্যবহার করুন:

  • Navigator.ArrivalListener একটি onArrival() কলব্যাক প্রদান করে, যা ডিভাইসটি কোনো গন্তব্যে পৌঁছালে সক্রিয় হয়।
  • RoadSnappedLocationProvider.LocationListener onLocationChanged() কলব্যাকটি প্রদান করে, যা ডিভাইসের অবস্থান পরিবর্তিত হলে সক্রিয় হয়।
  • Navigator.RemainingTimeOrDistanceChangedListener একটি onRemainingTimeOrDistanceChanged() কলব্যাক প্রদান করে, যা পরবর্তী গন্তব্যের সময় বা দূরত্ব একটি নির্দিষ্ট পরিমাণের চেয়ে বেশি পরিবর্তিত হলে ট্রিগার হয়।
  • Navigator.RouteChangedListener একটি onRouteChanged() কলব্যাক প্রদান করে, যা রাউট পরিবর্তিত হলে ট্রিগার হয়।

কোডটি দেখুন

গন্তব্যে আগমন সনাক্ত করুন

এখানে, গন্তব্য বলতে চূড়ান্ত গন্তব্য বা একটি ওয়েপয়েন্টকে বোঝায়। গন্তব্যে পৌঁছানো শনাক্ত করতে, Navigator.addArrivalListener() কল করুন, যা ডিভাইসটি গন্তব্যে পৌঁছালে একটি কলব্যাকের জন্য রেজিস্টার করে।

গন্তব্যে পৌঁছানোর পর, অ্যান্ড্রয়েডের জন্য নেভিগেশন 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 পরিষেবা লোকেশন API-তে ফিউজড লোকেশন প্রোভাইডার দ্বারা ফেরত দেওয়া অবস্থান থেকে ভিন্ন হতে পারে।

নেভিগেশন এসডিকে যতবার সম্ভব অবস্থানের হালনাগাদ তথ্য প্রদান করে। যখন অবস্থানের কোনো হালনাগাদ পাওয়া যায়, তখন নেভিগেশন এসডিকে 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 ও রিটার্ন করে। এই enum-টি heavy, medium, light, বা unknown-এর মধ্যে যেকোনো একটি হবে। এটি ম্যাপ UI-তে eta-তে আপনি যে রঙ দেখেন তার সাথে সামঞ্জস্যপূর্ণ (heavy = লাল, medium = হলুদ, light = সবুজ)। আপনার নিজের eta ফুটার তৈরি করার প্রয়োজন হলে এটি সহায়ক।

মেমরি লিক এড়ানোর জন্য, যখন লিসেনারটির আর প্রয়োজন হবে না, তখন আপনাকে অবশ্যই Navigator.removeRemainingTimeOrDistanceChangedListener(listener) কল করতে হবে।

নিচের নমুনাটিতে অনুরোধ করা হয়েছে যেন অবশিষ্ট সময় ৬০ সেকেন্ডের বেশি অথবা অবশিষ্ট দূরত্ব ১০০ মিটারের বেশি পরিবর্তিত হলে একটি কলব্যাক পাঠানো হয়।

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() কল করুন।

যখন রুট পরিবর্তিত হয়, তখন নেভিগেশন এসডিকে 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);
    }
});

আপনি প্রোগ্রাম্যাটিকভাবেও নাইট মোড সেট করতে পারেন। আরও তথ্যের জন্য, ‘নাইট মোড সেট করুন’ দেখুন।