উপকরণ ক্লাস্টার

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

ইনস্ট্রুমেন্ট ক্লাস্টার এপিআই (একটি অ্যান্ড্রয়েড এপিআই) ব্যবহার করুন ন্যাভিগেশন অ্যাপ্লিকেশানগুলি, Google মানচিত্র সহ, একটি গাড়ির একটি সেকেন্ডারি ডিসপ্লেতে, যেমন ইন্সট্রুমেন্ট প্যানেলে স্টিয়ারিং হুইলের পিছনে। এই পৃষ্ঠাটি বর্ণনা করে যে কীভাবে সেই সেকেন্ডারি ডিসপ্লে নিয়ন্ত্রণ করতে একটি পরিষেবা তৈরি করতে হয় এবং তারপরে পরিষেবাটিকে CarService সাথে সংহত করতে হয় যাতে নেভিগেশন অ্যাপগুলি একটি ব্যবহারকারী ইন্টারফেস প্রদর্শন করতে পারে।

পরিভাষা

এই পৃষ্ঠায় নিম্নলিখিত পদগুলি ব্যবহার করা হয়েছে:

মেয়াদ বর্ণনা
CarInstrumentClusterManager একটি CarManager যা বাহ্যিক অ্যাপগুলিকে ইনস্ট্রুমেন্ট ক্লাস্টারে একটি অ্যাক্টিভিটি চালু করতে সক্ষম করে এবং যখন ইনস্ট্রুমেন্ট ক্লাস্টার ক্রিয়াকলাপগুলি প্রদর্শনের জন্য প্রস্তুত থাকে তখন কলব্যাক গ্রহণ করে৷
কার ম্যানেজার CarService দ্বারা বাস্তবায়িত গাড়ি-নির্দিষ্ট পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করতে বাহ্যিক অ্যাপগুলি দ্বারা ব্যবহৃত সমস্ত পরিচালকদের বেস ক্লাস৷
CarService অ্যান্ড্রয়েড প্ল্যাটফর্ম পরিষেবা যা বাহ্যিক অ্যাপ্লিকেশানগুলির মধ্যে যোগাযোগ প্রদান করে (Google মানচিত্র সহ) এবং গাড়ি-নির্দিষ্ট বৈশিষ্ট্য, যেমন ইনস্ট্রুমেন্ট ক্লাস্টার অ্যাক্সেস।
গন্তব্য গাড়িটি নেভিগেট করবে এমন চূড়ান্ত গন্তব্য।
ETA গন্তব্যে পৌঁছানোর আনুমানিক সময়।
হেড ইউনিট (HU) একটি গাড়িতে এম্বেড করা প্রাথমিক গণনা ইউনিট। HU সমস্ত অ্যান্ড্রয়েড কোড চালায় এবং গাড়ির কেন্দ্রীয় ডিসপ্লেতে সংযুক্ত থাকে।
উপকরণ ক্লাস্টার স্টিয়ারিং হুইলের পিছনে এবং গাড়ির যন্ত্রগুলির মধ্যে অবস্থিত সেকেন্ডারি ডিসপ্লে। এটি গাড়ির অভ্যন্তরীণ নেটওয়ার্ক (CAN বাস) বা HU এর সাথে সংযুক্ত একটি সেকেন্ডারি ডিসপ্লের মাধ্যমে HU এর সাথে সংযুক্ত একটি স্বাধীন কম্পিউটেশনাল ইউনিট হতে পারে।
InstrumentClusterRenderingService ইনস্ট্রুমেন্ট ক্লাস্টার প্রদর্শনের সাথে ইন্টারফেস করতে ব্যবহৃত পরিষেবার জন্য বেস ক্লাস। OEM-কে অবশ্যই এই শ্রেণীর একটি এক্সটেনশন প্রদান করতে হবে যা OEM-নির্দিষ্ট হার্ডওয়্যারের সাথে ইন্টারঅ্যাক্ট করে।
কিচেনসিঙ্ক অ্যাপ অ্যান্ড্রয়েড অটোমোটিভের সাথে পরীক্ষা অ্যাপ্লিকেশন অন্তর্ভুক্ত।
রুট একটি নির্দিষ্ট পথ যা দিয়ে একটি যানবাহন একটি গন্তব্যে পৌঁছানোর জন্য নেভিগেট করে।
সিঙ্গেলটন পরিষেবা android:singleUser অ্যাট্রিবিউট সহ একটি Android পরিষেবা৷ যে কোনো সময়ে, পরিষেবার সর্বাধিক একটি দৃষ্টান্ত অ্যান্ড্রয়েড সিস্টেমে চলে৷

পূর্বশর্ত

ইন্টিগ্রেশন বিকাশ করতে, এই উপাদানগুলি থাকতে ভুলবেন না:

  • অ্যান্ড্রয়েড উন্নয়ন পরিবেশ। অ্যান্ড্রয়েড ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করতে, বিল্ড প্রয়োজনীয়তা দেখুন।
  • অ্যান্ড্রয়েড সোর্স কোড ডাউনলোড করুন। পাই-কার-রিলিজ শাখা (বা পরে) থেকে Android সোর্স কোডের সর্বশেষ সংস্করণটি https ://android.googlesource.com-এ পান।
  • হেড ইউনিট (HU)। একটি Android ডিভাইস যা Android 9 (বা পরবর্তীতে) চালাতে সক্ষম। এই ডিভাইসটির নিজস্ব ডিসপ্লে থাকতে হবে এবং Android এর নতুন বিল্ডের সাথে ডিসপ্লে ফ্ল্যাশ করতে সক্ষম হতে হবে।
  • ইন্সট্রুমেন্ট ক্লাস্টার নিম্নলিখিতগুলির মধ্যে একটি:
    • HU এর সাথে সংযুক্ত শারীরিক মাধ্যমিক প্রদর্শন। যদি ডিভাইস হার্ডওয়্যার এবং কার্নেল একাধিক প্রদর্শনের পরিচালনা সমর্থন করে।
    • স্বাধীন ইউনিট। যে কোনো কম্পিউটেশনাল ইউনিট একটি নেটওয়ার্ক সংযোগের মাধ্যমে HU এর সাথে সংযুক্ত, তার নিজস্ব ডিসপ্লেতে একটি ভিডিও স্ট্রিম গ্রহণ এবং প্রদর্শন করতে সক্ষম।
    • এমুলেটেড ডিসপ্লে। বিকাশের সময়, আপনি এই অনুকরণ করা পরিবেশগুলির মধ্যে একটি ব্যবহার করতে পারেন:
      • সিমুলেটেড সেকেন্ডারি ডিসপ্লে। যেকোন AOSP অ্যান্ড্রয়েড ডিস্ট্রিবিউশনে একটি সিমুলেটেড সেকেন্ডারি ডিসপ্লে সক্ষম করতে, সেটিংস সিস্টেম অ্যাপ্লিকেশনের বিকাশকারী বিকল্প সেটিংসে যান এবং তারপরে সেকেন্ডারি ডিসপ্লেগুলি সিমুলেট করুন নির্বাচন করুন৷ এই কনফিগারেশনটি একটি ফিজিক্যাল সেকেন্ডারি ডিসপ্লে সংযুক্ত করার সমতুল্য, এই ডিসপ্লেটি প্রাইমারি ডিসপ্লেতে সুপারইম্পোজ করা হয়েছে।
      • অনুকরণ করা যন্ত্র ক্লাস্টার। অ্যান্ড্রয়েড অটোমোটিভের সাথে অন্তর্ভুক্ত অ্যান্ড্রয়েড এমুলেটরটি অ্যান্ড্রয়েড এমুলেটর _qemu-pipes সহ একটি উপকরণ ক্লাস্টার প্রদর্শন করার একটি বিকল্প প্রদান করে। এই এমুলেটেড এক্সটার্নাল ডিসপ্লেতে সংযোগ করতে DirectRenderingCluster রেফারেন্স ইনস্ট্রুমেন্ট ক্লাস্টার বাস্তবায়ন ব্যবহার করুন।

ইন্টিগ্রেশন আর্কিটেকচার

ইন্টিগ্রেশন উপাদান

ইনস্ট্রুমেন্ট ক্লাস্টার এপিআই-এর যেকোনো একীকরণ এই তিনটি উপাদান নিয়ে গঠিত:

  • CarService
  • নেভিগেশন অ্যাপস
  • OEM উপকরণ ক্লাস্টার পরিষেবা

ইন্টিগ্রেশন উপাদান

গাড়ী সেবা

CarService নেভিগেশন অ্যাপ এবং গাড়ির মধ্যে মধ্যস্থতা করে, এটি নিশ্চিত করে যে কোনও নির্দিষ্ট সময়ে শুধুমাত্র একটি নেভিগেশন অ্যাপ সক্রিয় থাকে এবং শুধুমাত্র android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL অনুমতি সহ অ্যাপগুলি গাড়িতে ডেটা পাঠাতে পারে।

CarService সমস্ত গাড়ি-নির্দিষ্ট পরিষেবা বুটস্ট্র্যাপ করে এবং ম্যানেজারদের একটি সিরিজের মাধ্যমে এই পরিষেবাগুলিতে অ্যাক্সেস প্রদান করে। পরিষেবাগুলির সাথে যোগাযোগ করতে, গাড়িতে চলমান অ্যাপ্লিকেশনগুলি এই পরিচালকদের অ্যাক্সেস করতে পারে৷

ইন্সট্রুমেন্ট ক্লাস্টার বাস্তবায়নের জন্য, স্বয়ংচালিত OEM-কে অবশ্যই InstrumentClusterRendererService-এর একটি কাস্টম বাস্তবায়ন তৈরি করতে হবে এবং সেই কাস্টমাইজড বাস্তবায়নের দিকে নির্দেশ করতে config.xml ফাইলটি আপডেট করতে হবে।

একটি ইনস্ট্রুমেন্ট ক্লাস্টার রেন্ডার করার সময়, বুট প্রক্রিয়া চলাকালীন CarService InstrumentClusterService এর বাস্তবায়ন সনাক্ত করতে config.xml এর InstrumentClusterRendererService কীটি পড়ে। AOSP-তে, এই এন্ট্রি নেভিগেশন স্টেট API নমুনা ক্লাস্টার বাস্তবায়ন রেন্ডার পরিষেবার দিকে নির্দেশ করে:

<string name="instrumentClusterRendererService">
android.car.cluster/.ClusterRenderingService
</string>

এই এন্ট্রিতে উল্লেখ করা পরিষেবাটি আরম্ভ করা হয়েছে এবং CarService সাথে আবদ্ধ। যখন নেভিগেশন অ্যাপ্লিকেশানগুলি, Google মানচিত্রের মতো, একটি CarInstrumentClusterManager জন্য অনুরোধ করে, তখন CarService একটি ম্যানেজার প্রদান করে যা আবদ্ধ InstrumentClusterRenderingService থেকে ইনস্ট্রুমেন্ট ক্লাস্টার অবস্থা আপডেট করে। (এই ক্ষেত্রে, আবদ্ধ Android পরিষেবাগুলিকে বোঝায়।)

ইন্সট্রুমেন্ট ক্লাস্টার সার্ভিস

OEM-কে অবশ্যই একটি Android প্যাকেজ (APK) তৈরি করতে হবে যাতে InstrumentClusterRendererService . একটি নমুনার জন্য ClusterRenderingService দেখুন।

এই ক্লাস দুটি উদ্দেশ্য পরিবেশন করে:

  • একটি ইন্টারফেস অ্যান্ড্রয়েড এবং ইনস্ট্রুমেন্ট ক্লাস্টার রেন্ডারিং ডিভাইস প্রদান করে (এই পৃষ্ঠার উদ্দেশ্য)।
  • নেভিগেশন স্টেট আপডেট গ্রহণ করে এবং রেন্ডার করে, যেমন টার্ন-বাই-টার্ন নেভিগেশন নির্দেশিকা।

প্রথম উদ্দেশ্যের জন্য, InstrumentClusterRendererService এর OEM বাস্তবায়নকে অবশ্যই গাড়ির CarService স্ক্রীনে তথ্য রেন্ডার করতে ব্যবহৃত সেকেন্ডারি ডিসপ্লে শুরু করতে হবে এবং InstrumentClusterRendererService.setClusterActivityOptions() এবং InstrumentClusterRendererService.setClusterActivityState() .

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

ইন্টিগ্রেশন সিকোয়েন্স

নিম্নলিখিত চিত্রটি একটি নেভিগেশন অবস্থার বাস্তবায়নকে চিত্রিত করে যা আপডেটগুলি রেন্ডার করে:

ইন্টিগ্রেশন সিকোয়েন্স

এই চিত্রে, রঙগুলি নিম্নলিখিতগুলিকে নির্দেশ করে:

  • হলুদ। CarService এবং CarNavigationStatusManager অ্যান্ড্রয়েড প্ল্যাটফর্ম দ্বারা সরবরাহ করা হয়েছে।
  • সায়ান। InstrumentClusterRendererService OEM দ্বারা বাস্তবায়িত।
  • বেগুনি। Google এবং তৃতীয় পক্ষের বিকাশকারীদের দ্বারা বাস্তবায়িত ন্যাভিগেশন অ্যাপ।
  • সবুজ। CarAppFocusManager

নেভিগেশন স্টেট তথ্য প্রবাহ এই ক্রম অনুসরণ করে:

  1. CarService InstrumentClusterRenderingService শুরু করে।
  2. আরম্ভ করার সময়, InstrumentClusterRenderingService এর সাথে CarService আপডেট করে:
    1. ইনস্ট্রুমেন্ট ক্লাস্টার প্রদর্শন বৈশিষ্ট্য, যেমন অস্পষ্ট সীমানা (পরে অস্পষ্ট সীমানা সম্পর্কে আরও বিশদ দেখুন)।
    2. ইনস্ট্রুমেন্ট ক্লাস্টার ডিসপ্লের ভিতরে ক্রিয়াকলাপগুলি চালু করার জন্য প্রয়োজনীয় কার্যকলাপ বিকল্পগুলি ( ActivityOptions এ আরও বিশদ দেখুন।
  3. একটি নেভিগেশন অ্যাপ (যেমন অ্যান্ড্রয়েড অটোমোটিভের জন্য Google মানচিত্র বা প্রয়োজনীয় অনুমতি সহ যেকোনো মানচিত্র অ্যাপ):
    1. car-lib থেকে কার ক্লাস ব্যবহার করে একটি CarAppFocusManager পায়।
    2. পালাক্রমে দিকনির্দেশ শুরু হওয়ার আগে, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION কে appType প্যারামিটার হিসেবে পাস করতে CarAppFocusManager.requestFocus() এ কল করুন।
  4. CarAppFocusManager এই অনুরোধটি CarService কে জানায়। যদি মঞ্জুর করা হয়, CarService নেভিগেশন অ্যাপ প্যাকেজ পরিদর্শন করে এবং android.car.cluster.NAVIGATION বিভাগ দ্বারা চিহ্নিত একটি কার্যকলাপ সনাক্ত করে।
  5. যদি পাওয়া যায়, নেভিগেশন অ্যাপটি অ্যাক্টিভিটি চালু করতে InstrumentClusterRenderingService দ্বারা রিপোর্ট করা ActivityOptions ব্যবহার করে এবং ইনস্ট্রুমেন্ট ক্লাস্টার ডিসপ্লে বৈশিষ্ট্যগুলিকে উদ্দেশ্যের অতিরিক্ত হিসেবে অন্তর্ভুক্ত করে।

এপিআই একীভূত করা

InstrumentClusterRenderingService বাস্তবায়ন অবশ্যই:

  • AndroidManifest.xml-এ নিম্নলিখিত মান যোগ করে সিঙ্গলটন পরিষেবা হিসাবে মনোনীত হন। ইনস্ট্রুমেন্ট ক্লাস্টার পরিষেবার একটি একক অনুলিপি চালানো হবে তা নিশ্চিত করার জন্য এটি প্রয়োজনীয়, এমনকি সূচনা এবং ব্যবহারকারীর স্যুইচিংয়ের সময়ও:
    android:singleUser="true"
  • BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE সিস্টেম অনুমতি ধরে রাখুন। এটি গ্যারান্টি দেয় যে শুধুমাত্র অ্যান্ড্রয়েড সিস্টেম ইমেজের অংশ হিসাবে অন্তর্ভুক্ত করা ইনস্ট্রুমেন্ট ক্লাস্টার রেন্ডারিং পরিষেবাটি সর্বদা CarService দ্বারা আবদ্ধ থাকবে :
    <uses-permission android:name="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"/>
    

InstrumentClusterRenderingService বাস্তবায়ন করা

পরিষেবা তৈরি করতে:

  1. InstrumentClusterRenderingService থেকে প্রসারিত একটি ক্লাস লিখুন এবং তারপর আপনার AndroidManifest.xml ফাইলে একটি সংশ্লিষ্ট এন্ট্রি যোগ করুন। এই ক্লাসটি ইনস্ট্রুমেন্ট ক্লাস্টার ডিসপ্লে নিয়ন্ত্রণ করে এবং ( ঐচ্ছিকভাবে ) নেভিগেশন স্টেট API ডেটা রেন্ডার করতে পারে।
  2. onCreate() এর সময়, রেন্ডারিং হার্ডওয়্যারের সাথে যোগাযোগ শুরু করতে এই পরিষেবাটি ব্যবহার করুন। বিকল্প অন্তর্ভুক্ত:
    • যন্ত্র ক্লাস্টারের জন্য ব্যবহৃত গৌণ প্রদর্শন নির্ধারণ করুন।
    • একটি ভার্চুয়াল ডিসপ্লে তৈরি করুন যাতে ইনস্ট্রুমেন্ট ক্লাস্টার অ্যাপ রেন্ডার করা ছবিকে একটি বাহ্যিক ইউনিটে (ভিডিও স্ট্রিমিং ফরম্যাট ব্যবহার করে, যেমন H.264) প্রেরণ করে।
  3. উপরে নির্দেশিত ডিসপ্লেটি প্রস্তুত হলে, এই পরিষেবাটিকে অবশ্যই InstrumentClusterRenderingService#setClusterActivityLaunchOptions() কল করে সঠিক ActivityOptions সংজ্ঞায়িত করতে হবে যা ইনস্ট্রুমেন্ট ক্লাস্টারে একটি কার্যকলাপ প্রদর্শন করতে ব্যবহার করা আবশ্যক৷ এই পরামিতি ব্যবহার করুন:
    • বিভাগ CarInstrumentClusterManager#CATEGORY_NAVIGATION
    • ActivityOptions. একটি ActivityOptions উদাহরণ যা ইনস্ট্রুমেন্ট ক্লাস্টারে একটি কার্যকলাপ চালু করতে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, AOSP-এ নমুনা ইনস্ট্রুমেন্ট ক্লাস্টার বাস্তবায়ন থেকে:
      getService().setClusterActivityLaunchOptions(
         CATEGORY_NAVIGATION,
         ActivityOptions.makeBasic()
            .setLaunchDisplayId(displayId));
      
  4. যখন ইন্সট্রুমেন্ট ক্লাস্টার ক্রিয়াকলাপ প্রদর্শনের জন্য প্রস্তুত হয়, তখন এই পরিষেবাটি অবশ্যই InstrumentClusterRenderingService#setClusterActivityState() চালু করতে হবে। এই পরামিতি ব্যবহার করুন:
    • category CarInstrumentClusterManager#CATEGORY_NAVIGATION
    • ClusterActivityState দিয়ে state বান্ডিল তৈরি হয়েছে। নিম্নলিখিত তথ্য প্রদান করতে ভুলবেন না:
      • visible ইনস্ট্রুমেন্ট ক্লাস্টারটিকে দৃশ্যমান এবং সামগ্রী প্রদর্শনের জন্য প্রস্তুত হিসাবে নির্দিষ্ট করে৷
      • unobscuredBounds একটি আয়তক্ষেত্র যা ইন্সট্রুমেন্ট ক্লাস্টার ডিসপ্লের মধ্যে এলাকাটি সংজ্ঞায়িত করে যেখানে বিষয়বস্তু প্রদর্শন করা নিরাপদ। উদাহরণস্বরূপ, ডায়াল এবং গেজ দ্বারা আচ্ছাদিত এলাকা।
  5. Service#dump() পদ্ধতি ওভাররাইড করুন এবং ডিবাগিংয়ের জন্য দরকারী স্থিতি তথ্য রিপোর্ট করুন (আরো তথ্যের জন্য ডাম্পসি দেখুন)।

নমুনা InstrumentClusterRenderingService বাস্তবায়ন

নিম্নলিখিত উদাহরণটি একটি InstrumentClusterRenderingService বাস্তবায়নের রূপরেখা দেয়, যা একটি দূরবর্তী শারীরিক প্রদর্শনে ইনস্ট্রুমেন্ট ক্লাস্টার সামগ্রী উপস্থাপন করার জন্য একটি VirtualDisplay ডিসপ্লে তৈরি করে।

বিকল্পভাবে, এই কোডটি HU এর সাথে সংযুক্ত একটি ফিজিক্যাল সেকেন্ডারি ডিসপ্লের ডিসপ্লে displayId পাস করতে পারে, যদি একটি উপলব্ধ বলে জানা যায়।

/**
* Sample {@link InstrumentClusterRenderingService} implementation
*/
public class SampleClusterServiceImpl extends InstrumentClusterRenderingService {
   // Used to retrieve or create displays
   private final DisplayManager mDisplayManager;
   // Unique identifier for the display that will be used for instrument
   // cluster
   private final String mUniqueId = UUID.randomUUID().toString();
   // Format of the instrument cluster display
   private static final int DISPLAY_WIDTH = 1280;
   private static final int DISPLAY_HEIGHT = 720;
   private static final int DISPLAY_DPI = 320;
   // Area not covered by instruments
   private static final int DISPLAY_UNOBSCURED_LEFT = 40;
   private static final int DISPLAY_UNOBSCURED_TOP = 0;
   private static final int DISPLAY_UNOBSCURED_RIGHT = 1200;
   private static final int DISPLAY_UNOBSCURED_BOTTOM = 680;
   @Override
   public void onCreate() {
      super.onCreate();
      // Create a virtual display to render instrument cluster activities on
      mDisplayManager = getSystemService(DisplayManager.class);
      VirtualDisplay display = mDisplayManager.createVirtualDisplay(
          mUniqueId, DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_DPI, null,
          0 /* flags */, null, null);
      // Do any additional initialization (e.g.: start a video stream
      // based on this virtual display to present activities on a remote
      // display).
      onDisplayReady(display.getDisplay());
}
private void onDisplayReady(Display display) {
    // Report activity options that should be used to launch activities on
    // the instrument cluster.
    String category = CarInstrumentClusterManager.CATEGORY_NAVIGATION;
    ActionOptions options = ActivityOptions.makeBasic()
        .setLaunchDisplayId(display.getDisplayId());
    setClusterActivityOptions(category, options);
    // Report instrument cluster state.
    Rect unobscuredBounds = new Rect(DISPLAY_UNOBSCURED_LEFT,
        DISPLAY_UNOBSCURED_TOP, DISPLAY_UNOBSCURED_RIGHT,
        DISPLAY_UNOBSCURED_BOTTOM);
    boolean visible = true;
    ClusterActivityState state = ClusterActivityState.create(visible,
       unobscuredBounds);
    setClusterActivityState(category, options);
  }
}

CarAppFocusManager ব্যবহার করে

CarAppFocusManager API getAppTypeOwner() নামে একটি পদ্ধতি প্রদান করে, যা OEM-এর দ্বারা লিখিত ক্লাস্টার পরিষেবাকে যে কোনো সময়ে কোন নেভিগেশন অ্যাপে নেভিগেশন ফোকাস আছে তা জানার অনুমতি দেয়। OEMs বিদ্যমান CarAppFocusManager#addFocusListener() পদ্ধতি ব্যবহার করতে পারে এবং তারপর কোন অ্যাপে ফোকাস আছে তা জানতে getAppTypeOwner() ব্যবহার করতে পারে। এই তথ্যের সাথে, OEMগুলি করতে পারে:

  • ন্যাভিগেশন অ্যাপ হোল্ডিং ফোকাস দ্বারা প্রদত্ত ক্লাস্টার কার্যকলাপে ক্লাস্টারে দেখানো কার্যকলাপটি পরিবর্তন করুন।
  • ফোকাসড নেভিগেশন অ্যাপে ক্লাস্টার অ্যাক্টিভিটি আছে কি না তা শনাক্ত করতে পারে। যদি ফোকাসড নেভিগেশন অ্যাপের কোনো ক্লাস্টার অ্যাক্টিভিটি না থাকে (অথবা যদি এই ধরনের অ্যাক্টিভিটি অক্ষম থাকে), তাহলে OEM গুলি এই সিগন্যালটি গাড়ি ডিআইএম-এ পাঠাতে পারে যাতে ক্লাস্টারের নেভিগেশন ফেসটি সম্পূর্ণভাবে এড়িয়ে যায়।

সক্রিয় নেভিগেশন বা ভয়েস কমান্ডের মতো বর্তমান অ্যাপ্লিকেশন ফোকাস সেট করতে এবং শুনতে CarAppFocusManager ব্যবহার করুন। সাধারণত এই ধরনের একটি অ্যাপ্লিকেশনের শুধুমাত্র একটি উদাহরণ সিস্টেমে সক্রিয়ভাবে চলছে (বা ফোকাস)।

অ্যাপ ফোকাস পরিবর্তন শুনতে CarAppFocusManager#addFocusListener(..) পদ্ধতি ব্যবহার করুন:

import android.car.CarAppFocusManager;

...

Car car = Car.createCar(this);
mAppFocusManager = (CarAppFocusManager)car.getCarManager(Car.APP_FOCUS_SERVICE);
mAppFocusManager.addFocusListener(this, CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);

...

public void onAppFocusChanged(int appType, boolean active) {
    // Use the CarAppFocusManager#getAppTypeOwner(appType) method call
    // to retrieve a list of active package names
}

CarAppFocusManager#getAppTypeOwner(..) পদ্ধতিটি ফোকাসে থাকা প্রদত্ত অ্যাপ্লিকেশন প্রকারের বর্তমান মালিকের প্যাকেজ নামগুলি পুনরুদ্ধার করতে ব্যবহার করুন৷ বর্তমান মালিক android:sharedUserId বৈশিষ্ট্য ব্যবহার করলে এই পদ্ধতিটি একাধিক প্যাকেজের নাম ফেরত দিতে পারে।

import android.car.CarAppFocusManager;

...

Car car = Car.createCar(this);
mAppFocusManager = (CarAppFocusManager)car.getCarManager(Car.APP_FOCUS_SERVICE);
List<String> focusOwnerPackageNames = mAppFocusManager.getAppTypeOwner(
              CarAppFocusManager.APP_FOCUS_TYPE_NAVIGATION);

if (focusOwnerPackageNames == null || focusOwnerPackageNames.isEmpty()) {
        // No Navigation application has focus
        // OEM may choose to show their default cluster view
} else {
       // focusOwnerPackageNames
       // Use the PackageManager to retrieve the cluster activity for the package(s)
       // returned in focusOwnerPackageNames
}

...

পরিশিষ্ট: নমুনা অ্যাপ্লিকেশন ব্যবহার করে

AOSP একটি নমুনা অ্যাপ্লিকেশন প্রদান করে যা নেভিগেশন স্টেট API প্রয়োগ করে।

এই নমুনা অ্যাপ্লিকেশন চালানোর জন্য:

  1. একটি সমর্থিত HU-তে Android Auto তৈরি এবং ফ্ল্যাশ করুন। আপনার ডিভাইসের জন্য নির্দিষ্ট Android বিল্ডিং এবং ফ্ল্যাশিং নির্দেশাবলী ব্যবহার করুন। নির্দেশাবলীর জন্য, রেফারেন্স বোর্ড ব্যবহার করা দেখুন।
  2. HU এর সাথে একটি ফিজিক্যাল সেকেন্ডারি ডিসপ্লে সংযুক্ত করুন (যদি সমর্থিত হয়) অথবা ভার্চুয়াল সেকেন্ডারি HU চালু করুন:
    1. সেটিংস অ্যাপে ডেভেলপার মোড নির্বাচন করুন।
    2. সেটিংস > সিস্টেম > অ্যাডভান্সড > ডেভেলপার অপশন > সেকেন্ডারি ডিসপ্লে অনুকরণে যান।
  3. HU রিবুট করুন। ClusterRenderingService পরিষেবাটি সেকেন্ডারি ডিসপ্লেতে সংযুক্ত।
  4. KitchenSink অ্যাপ চালু করতে:
    1. ড্রয়ার খুলুন।
    2. Inst যান. ক্লাস্টার
    3. মেটাডেটা শুরু করুন ক্লিক করুন।

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