Nav SDK - হেডলেস মোড

ভূমিকা

ন্যাভিগেশন এসডিকে (Nav SDK) একটি সেরা মানের টার্ন-বাই-টার্ন ফিচার প্রদান করে যা গ্রাহক এবং চালকদের জন্য, বিশেষ করে নতুন চালক বা যারা অঞ্চলটির সাথে পরিচিত নন, তাদের জন্য খুব সহায়ক হতে পারে। তবে, এমন কিছু নির্দিষ্ট ব্যবহারের ক্ষেত্র রয়েছে যেখানে কোম্পানিগুলো টার্ন-বাই-টার্ন ন্যাভিগেশন UI ব্যবহার করে চালকদের মনোযোগ রাস্তা থেকে সরাতে চায় না, কিন্তু তারপরেও তারা গাড়ির অবস্থান ট্র্যাক করতে এবং তাদের অনুসরণ করা রুট সম্পর্কিত ইভেন্টগুলো শুনতে চায়। এর একটি উদাহরণ হলো ট্রাক চালক, বিশেষ করে যদি তারা বিপজ্জনক পদার্থ পরিবহন করে থাকেন। অন্যান্য কোম্পানি যারা ভিন্ন উপায়ে ডেলিভারি করে—যেমন অল্প দূরত্বে হেঁটে—তাদেরও হয়তো টার্ন-বাই-টার্ন ফিচার চালু রাখার প্রয়োজন নাও হতে পারে এবং এতে ডিভাইসের ব্যাটারিও সাশ্রয় হবে।

পরিধি

এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে যে, কীভাবে কোম্পানিগুলো Nav SDK থেকে নেভিগেশন ম্যাপ (ভিউ) লুকিয়ে রেখেও লোকেশন ট্র্যাকিং, ইভেন্ট সাবস্ক্রিপশন এবং কলব্যাকের মতো Nav SDK-এর সমস্ত ফিচারের সুবিধা নিতে পারে। হেডলেস মোডে Nav SDK থেকে সংগৃহীত ডেটা যানবাহন ট্র্যাক করার সক্ষমতা উন্নত করতে এবং আনুমানিক পৌঁছানোর সময় (ETA) আরও নির্ভুলভাবে বুঝতে ব্যবহার করা যেতে পারে, যা শেষ পর্যন্ত স্বচ্ছতা এবং কার্যকারিতা নিয়ে আসে।

ন্যাভিগেশন এসডিকে হলো একটি নেটিভ অ্যান্ড্রয়েড / আইওএস লাইব্রেরি যা ড্রাইভার অ্যাপে যুক্ত করা হয়। মোবিলিটির প্রেক্ষাপটে, এটি নিম্নলিখিত কাজগুলোর জন্য দায়ী:

  • যে অ্যাপটি এটি চালাচ্ছে, সেখান থেকে রাস্তার অবস্থান সংগ্রহ করা হয়। রাস্তার অবস্থান অ্যান্ড্রয়েডের ফিউজডলোকেশনপ্রোভাইডার (FLP)-এর চেয়ে বেশি নির্ভুল, কারণ এটি নিকটতম রাস্তার অংশে অবস্থান শনাক্ত করতে গুগলের সড়ক নেটওয়ার্ক ব্যবহার করে, যা FLP থেকে প্রাপ্ত আনুমানিক পৌঁছানোর সময় (ETA) এবং অন্যান্য তথ্যকে অনেক বেশি সঠিক করে তোলে।
  • ধাপে ধাপে দিকনির্দেশনার অভিজ্ঞতা, যা চালকদের রিয়েল-টাইম ট্র্যাফিক এবং পথের অন্যান্য সীমাবদ্ধতা বিবেচনা করে দক্ষতার সাথে এক স্থান থেকে অন্য স্থানে পৌঁছাতে সাহায্য করে।
  • ইভেন্ট লিসেনার এবং রেজিস্টার্ড কলব্যাকের মাধ্যমে রুটের অগ্রগতি, অবস্থান, গতি ইত্যাদির উপর ভিত্তি করে ইভেন্ট ফায়ার করা।

ডিফল্ট অভিজ্ঞতা

যখন গ্রাহকরা Nav SDK প্রয়োগ করেন, তখন ধরে নেওয়া হয় যে তাদের টার্ন-বাই-টার্ন ফিচারটির প্রয়োজন। একারণেই Nav SDK-এর ডকুমেন্টেশনে ( অ্যান্ড্রয়েড এবং আইওএস ) টার্ন-বাই-টার্ন সক্রিয় রেখে কীভাবে Nav SDK প্রয়োগ করতে হয়, তার নির্দেশনা দেওয়া থাকে।

অ্যান্ড্রয়েডে অ্যাপে টার্ন-বাই-টার্ন ম্যাপ রেন্ডার করার জন্য SupportNavigationFragment বা NavigationView ব্যবহার করা হয়, অন্যদিকে iOS-এ এটি GMSMapView । এই UI এলিমেন্টগুলো আপনার অ্যাপে ইন্টারেক্টিভ ম্যাপ এবং টার্ন-বাই-টার্ন নেভিগেশন UI যোগ করে।

পরবর্তী অংশে, আমরা অ্যান্ড্রয়েড এবং আইওএস উভয়ের জন্য টার্ন-বাই-টার্ন সক্ষম ডিফল্ট ন্যাভ এসডিকে কোডের সাথে হেডলেস ন্যাভ এসডিকে কোডের তুলনা করব এবং প্রয়োজনীয় পরিবর্তনগুলো তুলে ধরব।

সমাধান

অ্যান্ড্রয়েড

অ্যান্ড্রয়েডে, এটি সেই জাভা কোড যা নেভ এসডিকে স্যাম্পল অ্যাপের অংশ হিসেবে আসে।

@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);

যেমনটি আপনি দেখতে পাচ্ছেন, ভিউটি সেই লেআউটকে নির্দেশ করে যা নেভিগেশন অভিজ্ঞতা আঁকার জন্য ব্যবহার করা উচিত এবং এই ক্ষেত্রে, NavigationView-এর পরিবর্তে একটি SupportNavigationFragment তৈরি করা হয়েছে।

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 কম্পোনেন্টের (যেমন: টগল) সাথে লিঙ্ক করা যেতে পারে, যা সেই অনুযায়ী হেডলেস মোড চালু বা বন্ধ করবে।

alt_textalt_text
সক্রিয় নেভিগেশন সহ (হেডলেস বন্ধ) নেভ এসডিকে চলছে একই অ্যাপ, কিন্তু এখন নেভ এসডিকে হেডলেস মোডে চলছে।

উপরে ডানদিকের উদাহরণটিতে যেমন দেখতে পাচ্ছেন, Nav SDK নেভিগেশন নেপথ্যে চলছে কিন্তু টার্ন-বাই-টার্ন অভিজ্ঞতাটি নিষ্ক্রিয় করা আছে।

আইওএস

iOS-এ MapView ইনিশিয়ালাইজেশনের সময় নিম্নলিখিত সেটিংটি যোগ করে খুব সহজেই হেডলেস মোড চালু করা যায়:

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 বাস্তবায়নের পদ্ধতির উপর নির্ভর করবে এবং স্ক্রিনশটটি শুধুমাত্র mapView লুকানোর প্রভাব বোঝানোর জন্য দেওয়া হয়েছে:

alt_textalt_text
সক্রিয় নেভিগেশন চলছে

iOS নমুনা অ্যাপ

হেডলেস মোডে একই অ্যাপ

বাস্তবায়ন বিবেচনা

যেহেতু হেডলেস মোড স্ক্রিন থেকে নেভিগেশন ম্যাপ লুকিয়ে রাখা ছাড়া আর কিছুই নয়, তাই এতে শুধুমাত্র স্ক্রিন টাইম সাশ্রয় হয়, যার ফলে ডিভাইসে বেশি ব্যাটারি ব্যাকআপ পাওয়া যায়। তবে, যেহেতু নেভ এসডিকে (Nav SDK) চলতে থাকবে, তাই লোকেশন আপডেট এবং সমস্ত ইভেন্ট কলব্যাক স্বাভাবিকভাবে ট্রিগার হবে, সুতরাং এই কনফিগারেশন ব্যবহারে কোনো পার্শ্বপ্রতিক্রিয়া নেই।

উপসংহার

এই ডকুমেন্টটি দেখায় যে Nav SDK কতটা নমনীয় এবং বিভিন্ন অপারেটিং সিস্টেমের সীমাবদ্ধতা থাকা সত্ত্বেও আমরা সেগুলোতে কী কী অর্জন করতে পারি। এটি গ্রাহকদের মনোযোগের বিচ্যুতি এড়াতে এবং নিরাপত্তা উন্নত করতে তাদের ড্রাইভিং অভিজ্ঞতা কাস্টমাইজ করার সুযোগও দেয়।

অতিরিক্ত সম্পদ

পূর্বোক্ত কারণগুলোর জন্য নেভিগেশনের সময় যদি নোটিফিকেশন নিষ্ক্রিয় করতে হয়, তবে সেটিও করা সম্ভব; অনুগ্রহ করে Nav SDK-তে 'Modify turn by turn notifications' অংশটি দেখুন।