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

ভূমিকা

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

ব্যাপ্তি

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

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

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

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

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

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

পরবর্তী বিভাগে, আমরা ডিফল্ট Nav SDK-কে টার্ন-বাই-টার্ন সক্ষম কোডের সাথে Android এবং iOS উভয়ের জন্য হেডলেস 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);

আপনি দেখতে পাচ্ছেন, ভিউটি সেই লেআউটের দিকে নির্দেশ করে যা নেভিগেশন অভিজ্ঞতা আঁকতে ব্যবহার করা উচিত এবং এই ক্ষেত্রে, 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 চলছে (হেডলেস অফ) একই অ্যাপ কিন্তু এখন Nav SDK হেডলেস মোডে চলছে

উপরের ডান উদাহরণে আপনি দেখতে পাচ্ছেন, 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-তে পালাক্রমে বিজ্ঞপ্তিগুলি পরিবর্তন করুন দেখুন।