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

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

পরিভাষা

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

মেয়াদ বর্ণনা
CarInstrumentClusterManager একটি CarManager দৃষ্টান্ত যা বাহ্যিক অ্যাপগুলিকে ইনস্ট্রুমেন্ট ক্লাস্টারে একটি কার্যকলাপ চালু করতে সক্ষম করে এবং যখন ইনস্ট্রুমেন্ট ক্লাস্টার ক্রিয়াকলাপগুলি প্রদর্শনের জন্য প্রস্তুত থাকে তখন কলব্যাক গ্রহণ করে৷
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 অ্যান্ড্রয়েড ডিস্ট্রিবিউশনে একটি সিমুলেটেড সেকেন্ডারি ডিসপ্লে সক্ষম করতে, সেটিংস সিস্টেম অ্যাপে ডেভেলপার অপশন সেটিংসে যান এবং তারপর সেকেন্ডারি ডিসপ্লে সিমুলেট করুন নির্বাচন করুন। এই কনফিগারেশনটি একটি ফিজিক্যাল সেকেন্ডারি ডিসপ্লে সংযুক্ত করার সমতুল্য, এই ডিসপ্লেটি প্রাইমারি ডিসপ্লেতে সুপারইম্পোজ করা হয়েছে।
      • অনুকরণ করা যন্ত্র ক্লাস্টার। অ্যান্ড্রয়েড অটোমোটিভের সাথে অন্তর্ভুক্ত অ্যান্ড্রয়েড এমুলেটরটি সেকেন্ডারি ডিসপ্লেতে সংযুক্ত থাকা ClusterRenderingService পরিষেবা সহ একটি যন্ত্র ক্লাস্টার প্রদর্শন করার বিকল্প প্রদান করে।
      • এমুলেটর _qemu-পাইপস। ClusterRenderingService পরিষেবাটি সেকেন্ডারি ডিসপ্লের সাথে সংযুক্ত। এই অনুকরণ করা বাহ্যিক প্রদর্শনের সাথে সংযোগ করতে রেফারেন্স যন্ত্র ক্লাস্টার বাস্তবায়ন।

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

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

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

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

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

গাড়ী সেবা

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

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

ইন্সট্রুমেন্ট ক্লাস্টার বাস্তবায়নের জন্য, স্বয়ংচালিত OEM-গুলিকে অবশ্যই InstrumentClusterRendererService-এর একটি কাস্টম বাস্তবায়ন তৈরি করতে হবে এবং ClusterRenderingService পরিষেবাটি সেকেন্ডারি ডিসপ্লেতে সংযুক্ত আছে আপডেট করতে হবে।

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

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

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

যন্ত্র ক্লাস্টার পরিষেবা

OEM-গুলিকে অবশ্যই একটি Android প্যাকেজ (APK) তৈরি করতে হবে যাতে ClusterRenderingService পরিষেবার একটি সাবক্লাস সেকেন্ডারি ডিসপ্লেতে সংযুক্ত থাকে৷ ClusterRenderingService পরিষেবাটি সেকেন্ডারি ডিসপ্লের সাথে সংযুক্ত। একটি নমুনার জন্য।

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

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

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

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

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

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

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

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

  • হলুদ। CarService এবং CarNavigationStatusManager অ্যান্ড্রয়েড প্ল্যাটফর্ম দ্বারা সরবরাহ করা হয়েছে। আরও জানতে, গাড়ি এবং CAR_NAVIGATION_SERVICE দেখুন।
  • সায়ান। InstrumentClusterRendererService OEM দ্বারা বাস্তবায়িত।
  • বেগুনি। Google এবং তৃতীয় পক্ষের বিকাশকারীদের দ্বারা বাস্তবায়িত ন্যাভিগেশন অ্যাপ।
  • সবুজ। CarAppFocusManager । আরও জানতে, নীচে CarAppFocusManager API এবং 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 ব্যবহার করে এবং ইনস্ট্রুমেন্ট ক্লাস্টার ডিসপ্লে বৈশিষ্ট্যগুলিকে উদ্দেশ্যের অতিরিক্ত হিসেবে অন্তর্ভুক্ত করে।

API ইন্টিগ্রেট করুন

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

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 app 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. মেটাডেটা শুরু করুন ক্লিক করুন।

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