ভূমিকা
ন্যাভিগেশন SDK (Nav SDK) ক্লাসে টার্ন-বাই-টার্ন ফিচার প্রদান করে যা গ্রাহকদের এবং ড্রাইভারদের, বিশেষ করে নতুন ড্রাইভার বা ড্রাইভার যারা এই অঞ্চলের সাথে পরিচিত নয় তাদের জন্য খুবই সহায়ক হতে পারে। যাইহোক, নির্দিষ্ট ব্যবহারের ক্ষেত্রে রয়েছে যেখানে কোম্পানিগুলি টার্ন-বাই-টার্ন নেভিগেশন UI এর মাধ্যমে চালকদের মনোযোগ রাস্তা থেকে সরিয়ে নিতে চায় না, কিন্তু তারপরও গাড়ির অবস্থানগুলি ট্র্যাক করতে এবং তারা যে পথ অনুসরণ করছে তার সাথে সম্পর্কিত ঘটনা শুনতে চায়। একটি উদাহরণ হল ট্রাক চালক, বিশেষ করে যদি তারা বিপজ্জনক উপকরণ পরিবহন করে। অন্যান্য কোম্পানীগুলি বিভিন্ন পদ্ধতি ব্যবহার করে ডেলিভারি করছে - যেমন স্বল্প দূরত্বের জন্য হাঁটা - এছাড়াও পালাক্রমে সক্ষম করার প্রয়োজন নাও হতে পারে এবং এটি ডিভাইসের ব্যাটারির জীবন বাঁচাতে পারে।
ব্যাপ্তি
এই দস্তাবেজটি বর্ণনা করে যে কীভাবে কোম্পানিগুলি Nav SDK থেকে নেভিগেশন মানচিত্র (ভিউ) লুকিয়ে রাখতে পারে এবং এখনও অবস্থান ট্র্যাকিং, ইভেন্ট সদস্যতা এবং কলব্যাকের ক্ষেত্রে Nav SDK-এর সমস্ত বৈশিষ্ট্য থেকে উপকৃত হতে পারে৷ হেডলেস মোডে Nav SDK থেকে ক্যাপচার করা ডেটা যানবাহনগুলিকে ট্র্যাক করার ক্ষমতা উন্নত করতে এবং ETAগুলিকে আরও সুনির্দিষ্টভাবে বোঝার জন্য ব্যবহার করা যেতে পারে যা শেষ পর্যন্ত স্বচ্ছতা এবং দক্ষতার দিকে নিয়ে যায়।
নেভিগেশন SDK
নেভিগেশন SDK হল একটি নেটিভ অ্যান্ড্রয়েড/আইওএস লাইব্রেরি যা ড্রাইভার অ্যাপে যোগ করা হয়েছে। গতিশীলতার প্রসঙ্গে, এটি এর জন্য দায়ী:
- এটি চালানো অ্যাপ থেকে রাস্তার স্ন্যাপ করা অবস্থানগুলি প্রাপ্ত করা। রোড-স্ন্যাপ করা অবস্থানগুলি অ্যান্ড্রয়েডের FusedLocationProvider (FLP) থেকে আরও সুনির্দিষ্ট, কারণ এটি Google-এর রোড নেটওয়ার্ক ব্যবহার করে অবস্থানগুলিকে কাছের রাস্তার অংশে নিয়ে যায়, যা FLP থেকে ETA এবং অন্যান্য তথ্যকে অনেক বেশি নির্ভুল করে তোলে৷
- টার্ন-বাই-টার্ন অভিজ্ঞতা যা ড্রাইভারদের রিয়েল-টাইম ট্র্যাফিক এবং অন্যান্য রুট সীমাবদ্ধতা বিবেচনা করে পয়েন্ট A থেকে পয়েন্ট B পর্যন্ত দক্ষতার সাথে যেতে দেয়।
- ইভেন্ট শ্রোতা এবং নিবন্ধিত কলব্যাকের মাধ্যমে রুটের অগ্রগতি, অবস্থান, গতি ইত্যাদির উপর ভিত্তি করে ইভেন্টগুলি ফায়ার করা।
ডিফল্ট অভিজ্ঞতা
যখন গ্রাহকরা Nav SDK প্রয়োগ করেন, তখন ধরে নেওয়া হয় যে তাদের টার্ন-বাই-টার্ন বৈশিষ্ট্য প্রয়োজন। এই কারণেই Nav SDK-এর ডকুমেন্টেশন ( Android এবং iOS ) কীভাবে এনভি SDK চালু করতে হবে তার নির্দেশনা প্রদান করে যাতে পালাক্রমে সক্ষম হয়৷
অ্যান্ড্রয়েড রেন্ডারিং-এ অ্যাপে টার্ন-বাই-টার্ন ম্যাপ একটি SupportNavigationFragment বা NavigationView ব্যবহার করে অর্জন করা হয়, যেখানে iOS-এ এটি একটি GMSMapView । এই UI উপাদানগুলি আপনার অ্যাপে ইন্টারেক্টিভ মানচিত্র এবং টার্ন-বাই-টার্ন নেভিগেশন UI যোগ করে।
পরবর্তী বিভাগে, আমরা প্রয়োজনীয় পরিবর্তনগুলি হাইলাইট করে, Android এবং iOS উভয়ের জন্য হেডলেস Nav SDK কোডের সাথে টার্ন-বাই-টার্ন সক্রিয় কোডের সাথে ডিফল্ট Nav SDK তুলনা করি।
সমাধান
অ্যান্ড্রয়েড
অ্যান্ড্রয়েডে, এটি হল জাভা কোড যা Nav SDK নমুনা অ্যাপের অংশ হিসেবে আসে।
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
setContentView(R.layout.activity_nav_fragment);
mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
আপনি দেখতে পাচ্ছেন, ভিউটি সেই লেআউটটিকে নির্দেশ করে যা নেভিগেশন অভিজ্ঞতা আঁকতে ব্যবহার করা উচিত এবং এই ক্ষেত্রে, নেভিগেশনভিউ- এর পরিবর্তে একটি সাপোর্টনেভিগেশন ফ্র্যাগমেন্ট তৈরি করা হয়।
Nav SDK কে হেডলেস মোডে শুরু করতে, আমাদের কেবল এই দুটি নির্দেশনা মুছে ফেলতে হবে। যদি ধারণাটি হেডলেস এবং নন-হেডলেস (সক্রিয় নেভিগেশন) এর মধ্যে টগল করার জন্য হয়, তাহলে একটি ভেরিয়েবল ব্যবহার করা যেতে পারে কিনা তা নির্ধারণ করতে হেডলেস ব্যবহার করা উচিত কি না, উদাহরণস্বরূপ:
Boolean mHeadless = true;
তারপর এটি পরে ব্যবহার করা যেতে পারে, যেমন:
@Override
@SuppressLint("MissingPermission")
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Obtain a reference to the NavigationFragment
if(!mHeadless) {
setContentView(R.layout.activity_nav_fragment);
mNavFragment =
(SupportNavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
}
mHeadless
ভেরিয়েবল একটি UI উপাদানের সাথে লিঙ্ক করা যেতে পারে (যেমন টগল) যা সেই অনুযায়ী হেডলেসকে সক্ষম বা নিষ্ক্রিয় করবে।
![]() | ![]() |
সক্রিয় নেভিগেশন সহ NA SDK চলছে (হেডলেস অফ) | একই অ্যাপ কিন্তু এখন Nav SDK সহ হেডলেস মোডে চলছে |
আপনি উপরের সঠিক উদাহরণে দেখতে পাচ্ছেন, নেভি SDK নেভিগেশন দৃশ্যের নীচে চলছে কিন্তু পালাক্রমে অভিজ্ঞতা অক্ষম করা হয়েছে।
iOS
IOS-এ হেডলেস মোডে ম্যাপভিউ শুরু করার সময় নিম্নলিখিত সেটিং যোগ করে খুব সহজেই করা যেতে পারে: \
mapView.isHidden = true
যেমন:
/// The main map view.
private lazy var mapView: GMSMapView = {
let mapView = GMSMapView(frame: .zero)
mapView.isHidden = true /// Make it headless!
mapView.isNavigationEnabled = true
mapView.settings.compassButton = true
mapView.delegate = self
return mapView
}()
এটি দেখতে কেমন হবে তা দেখুন - UI যেভাবে প্রয়োগ করা হয়েছে তার উপর স্ক্রীন নির্ভর করবে এবং স্ক্রিনশটটি শুধুমাত্র ম্যাপভিউ লুকানোর প্রভাবকে চিত্রিত করার জন্য:
![]() | ![]() |
সক্রিয় নেভিগেশন চলছে iOS নমুনা অ্যাপ্লিকেশন | হেডলেস মোডে একই অ্যাপ |
বাস্তবায়ন বিবেচনা
যেহেতু হেডলেস মোড স্ক্রীন থেকে নেভিগেশন ম্যাপ লুকিয়ে রাখা ছাড়া আর কিছুই নয়, শুধুমাত্র স্ক্রিন টাইম সংরক্ষণ করা হয় যা ডিভাইসে আরও বেশি ব্যাটারি সময় দেয়। যাইহোক, যেহেতু Nav SDK চলতে থাকবে, লোকেশন আপডেট এবং সমস্ত ইভেন্ট কলব্যাক স্বাভাবিকভাবে ট্রিগার করা হবে, তাই এই কনফিগারেশন ব্যবহার করার কোন পার্শ্বপ্রতিক্রিয়া নেই।
উপসংহার
এই নথিটি দেখায় যে Nav SDK কতটা নমনীয় এবং বিভিন্ন অপারেটিং সিস্টেমে তাদের সীমাবদ্ধতার কারণে আমরা কী অর্জন করতে পারি। এটি গ্রাহকদের বিভ্রান্তি এড়াতে এবং নিরাপত্তা উন্নত করতে তাদের ড্রাইভার অভিজ্ঞতা কাস্টমাইজ করার অনুমতি দেয়।
অতিরিক্ত সম্পদ
যদি নেভিগেশনের সময় বিজ্ঞপ্তিগুলিকে অক্ষম করতে হয়, উপরে উল্লিখিত কারণগুলির কারণে, এটিও অর্জন করা যেতে পারে, অনুগ্রহ করে Nav SDK-এ পালাক্রমে পরিবর্তনের বিজ্ঞপ্তিগুলি দেখুন৷