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

আপনার অ্যাপটি ব্যবহারকারীর রুট ধরে নেভিগেট করার সময় ঘটে যাওয়া ঘটনাগুলি শুনতে পারে।

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

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

  • 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 পরিষেবা অবস্থান API-তে সংযুক্ত অবস্থান সরবরাহকারী দ্বারা ফেরত দেওয়া অবস্থান থেকে আলাদা হতে পারে।

নেভিগেশন 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 ও ফেরত দেয়। এই enum হয় ভারী, মাঝারি, হালকা, অথবা অজানা হবে। এটি মানচিত্র UI-তে eta-তে আপনি যে রঙের দেখতে পান তার সাথে মিলে যায় (ভারী = লাল, মাঝারি = হলুদ, হালকা = সবুজ)। আপনার নিজস্ব 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() এ কল করুন।

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

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