নেভিগেশন ইভেন্ট শোনা

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

এক নজরে

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

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

কোডটি দেখুন

গন্তব্যে পৌঁছানো শনাক্ত করা

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

গন্তব্যে পৌঁছানোর পরে, Android-এর জন্য নেভিগেশন 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-তে ফিউজড লোকেশন প্রোভাইডার দ্বারা দেখানো লোকেশন থেকে আলাদা হতে পারে।

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

রুট পরিবর্তন হলে, 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);
    }
});

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