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

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

ওভারভিউ

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

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

কোড দেখুন

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

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

আসার পরে, Android-এর জন্য নেভিগেশন SDK onArrival() কলব্যাক চালু করে এবং পালাক্রমে নির্দেশিকা বন্ধ করে। পরবর্তী ওয়েপয়েন্টে যাওয়ার জন্য আপনাকে অবশ্যই স্পষ্টভাবে Navigator.continueToNextDestination() কল করতে হবে এবং পালাক্রমে নেভিগেশন চালিয়ে যেতে Navigator.startGuidance() কে কল করতে হবে।

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

মেমরি ফাঁস এড়াতে, আপনাকে অবশ্যই 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() পদ্ধতি ব্যবহার করে একাধিক ওয়েপয়েন্টের জন্য 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);
    }
});