আপনার পার্ক করা অ্যাপে Android Automotive OS-এর জন্য সহায়তা যোগ করা

Android Automotive OS ডিভাইসে আপনার অ্যাপ ডিস্ট্রিবিউট করার সময়, ফর্ম ফ্যাক্টরের জন্য অনন্য কিছু বিষয় আপনাকে বিবেচনা করতে হবে। এই গাইড থেকে আপনি সেইসব বিবেচনার ব্যাপারে জানতে পারবেন।

Android Automotive OS এমুলেটরে আপনার আগে থেকে থাকা অ্যাপ টেস্ট করা

Android Automotive OS-এর জন্য অ্যাপ তৈরি করা শুরু করতে, প্রথমে Android Automotive OS এমুলেটরে আপনার আগে থেকে থাকা অ্যাপ টেস্ট করুন। এমুলেটর সেট-আপ করতে, Android Automotive OS এমুলেটর ব্যবহার করে টেস্ট করুন লিঙ্কে দেওয়া ধাপগুলি অনুসরণ করুন। তারপর আপনি এমুলেটরে আপনার অ্যাপ রান করুন-এ দেওয়া নির্দেশাবলী অনুসরণ করে অ্যাপটি রান করতে পারবেন।

আপনার অ্যাপ চালানোর সময়, কম্প্যাটিবিলিটি সংক্রান্ত সমস্যা আছে কিনা তা দেখুন, যেমন নিম্নলিখিত:

  • ইনফোটেনমেন্ট স্ক্রিনের ওরিয়েন্টেশন নির্দিষ্ট করা থাকে। গাড়ির অ্যাপ কোয়ালিটি সংক্রান্ত নির্দেশিকা মেনে চলতে, অ্যাপকে অবশ্যই পোর্ট্রেট ও ল্যান্ডস্কেপ ওরিয়েন্টেশন, দুটিই সাপোর্ট করতে হবে।
  • অন্যান্য ডিভাইসে উপলভ্য API, Android Automotive OS-এ উপলভ্য নাও হতে পারে। যেমন, কিছু Google Play পরিষেবা API, Android Automotive OS-এ উপলভ্য নয়। এইসব সমস্যা কীভাবে সমাধান করবেন সেই সম্পর্কে আরও জানতে ফিচার বন্ধ করুন বিভাগ দেখুন।

আপনার অ্যাপের মেনিফেস্ট ফাইল কনফিগার করা

Android Automotive OS ডিভাইস টার্গেট করতে, আপনার অ্যাপে নির্দিষ্ট ম্যানিফেস্ট এন্ট্রি থাকতে হবে। Android Automotive OS ডিভাইসে ডিস্ট্রিবিউট করার জন্য আপনি অপ্ট-ইন করার পরে, গাড়িতে ব্যবহারের জন্য মানানসই অ্যাপগুলি নিরাপদ কিনা তা নিশ্চিত করতে Google Play সেগুলি পর্যালোচনা করে। আরও জানতে গাড়িতে ডিস্ট্রিবিউট করুন বিকল্প দেখুন।

Android Automotive OS-এর প্রয়োজনীয় ফিচার

Android Automotive OS-এর জন্য তৈরি করা সব অ্যাপকে Google Play-এর মাধ্যমে ডিস্ট্রিবিউট করার জন্য নির্দিষ্ট কিছু প্রয়োজনীয়তা পূরণ করতে হবে। আরও তথ্যের জন্য Google Play ফিচার সংক্রান্ত প্রয়োজনীয়তা পূরণ করুন।

বিভাগ-নির্দিষ্ট ম্যানিফেস্ট এন্ট্রি

পার্ক করা সব অ্যাপের ক্ষেত্রে প্রযোজ্য পূর্ববর্তী প্রয়োজনীয়তা ছাড়াও, ভিডিও ও গেমের বিভাগের ক্ষেত্রে অতিরিক্ত প্রয়োজনীয়তা আছে:

ড্রাইভার ডিস্ট্র্যাকশন সংক্রান্ত প্রয়োজনীয়তা পূরণ করা

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

ব্যবহারকারীর অভিজ্ঞতা সংক্রান্ত বিধিনিষেধ অ্যাক্টিভ থাকাকালীন ব্যবহার করা আটকান

ডিফল্ট হিসেবে, UX সংক্রান্ত বিধিনিষেধ চালু থাকলে অ্যাক্টিভিটি ব্যবহার বা লঞ্চ করা যায় না। আপনার অ্যাপে এই আচরণ প্রযোজ্য কিনা তা নিশ্চিত করতে, আপনার ম্যানিফেস্টের মধ্যে কোনও <activity> এলিমেন্টে নিম্নলিখিত <meta-data> এলিমেন্ট অন্তর্ভুক্ত করলে চলবে না:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

UX সংক্রান্ত বিধিনিষেধ অ্যাক্টিভ হওয়ার সময় আপনার অ্যাপের কোনও অ্যাক্টিভিটি আবার শুরু হলে, OS-এর মালিকানাধীন কোনও অ্যাক্টিভিটি দ্বারা এটি অস্পষ্ট হয়ে যায়।

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

Android Automotive OS কম্প্যাটিবিলিটি মোড অন্তর্ভুক্ত আছে এমন ডিভাইসে, সিস্টেম ব্লক করার কারণে আপনার অ্যাপের অ্যাক্টিভিটি পজ করা স্ট্যাটাস থেকে বন্ধ করা স্ট্যাটাসে ট্রানজিশন করে।

প্লেব্যাক বন্ধ করা এবং প্লেব্যাক আবার চালু করা আটকানো

কিছু অ্যাপের ক্ষেত্রে, onPause() চলাকালীন প্লেব্যাক পজ করা এবং onResume() না হওয়া পর্যন্ত প্লেব্যাক আবার শুরু করা আটকানোর জন্য স্ট্যাটাস ট্র্যাক করা, ড্রাইভারের মনোযোগ বিঘ্নিত হওয়ার প্রয়োজনীয়তা পূরণ করার জন্য যথেষ্ট।

লাইফসাইকেল কলব্যাকে প্রতিক্রিয়া জানানো আপনার অ্যাপের জন্য যথেষ্ট না হলে, আপনি নিচের বিভাগে যেভাবে বর্ণনা করা হয়েছে সেইভাবে সরাসরি UX বিধিনিষেধের অবস্থা শুনতে পারেন। যেমন, ছবির-মধ্যে-ছবি ফিচার কাজ করে এমন অ্যাপ লাইফসাইকেল কলব্যাকে কন্ডিশনাল চেকের পরিবর্তে সরাসরি শুনতে পছন্দ করতে পারে।

ব্যবহারকারীর অভিজ্ঞতা সংক্রান্ত বিধিনিষেধ শুনুন

UX সংক্রান্ত বিধিনিষেধ শুনতে, প্রথমে আপনার অ্যাপ মডিউলের build.gradle ফাইলে android.car লাইব্রেরিতে ডিপেন্ডেন্সি যোগ করুন। এটি Android SDK-এর একটি এক্সটেনশন যা Android Automotive OS-এর জন্য নির্দিষ্ট API প্রদান করে।

android {
    ...
    useLibrary("android.car")
}

UX-এর সীমাবদ্ধতা সংক্রান্ত স্ট্যাটাস পড়তে CarUxRestrictionsManager ব্যবহার করুন। গিয়ার বা স্পিডের মতো অন্যান্য হার্ডওয়্যার স্টেট থেকে UX সংক্রান্ত বিধিনিষেধের স্টেট নির্ধারণ করার চেষ্টা করবেন না, কারণ গাড়ির মধ্যে ডিসপ্লে অনুযায়ী UX সংক্রান্ত বিধিনিষেধ আলাদা হতে পারে।

val car = Car.createCar(context) ?: return
val carUxRestrictionsManager =
    car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE) as? CarUxRestrictionsManager ?: return

// You can either read the state directly ...
val currentUxRestrictions = carUxRestrictionsManager.currentCarUxRestrictions

// or listen to state changes
carUxRestrictionsManager.registerListener { carUxRestrictions: CarUxRestrictions ->
    // Handle UX restrictions
}

// Don't forget to teardown and release resources when they're no longer needed
carUxRestrictionsManager.unregisterListener()
car.disconnect()

CarUxRestrictions-এর মাধ্যমে প্রদান করা একমাত্র ভ্যালু যা আপনার অ্যাপ উল্লেখ করে তা হল isRequiresDistractionOptimization-এর রিটার্ন ভ্যালু। অন্যান্য ভ্যালু শুধুমাত্র সেইসব অ্যাক্টিভিটির জন্য প্রাসঙ্গিক যেগুলি ডিসট্রাকশন অপ্টিমাইজড হিসেবে চিহ্নিত করা হয়েছে।

আপনার ইমপ্লিমেন্টেশন পরীক্ষা করুন

নিম্নলিখিত পদ্ধতি ব্যবহার করে আপনার অ্যাপ ড্রাইভার ডিস্ট্র্যাকশন সংক্রান্ত প্রয়োজনীয়তা পূরণ করছে কিনা তা যাচাই করুন:

  1. Google Play Store বা কম্প্যাটিবিলিটি মোড ছাড়াই সিস্টেম ইমেজে আপনার অ্যাপ ইনস্টল করুন।
  2. লঞ্চার অ্যাপ গ্রিড খোলা রেখে, ড্রাইভিং সিমুলেট করুন এবং যাচাই করুন যে আপনার অ্যাপ খোলা যাচ্ছে না।
  3. ড্রাইভিং সিমুলেট করা বন্ধ করুন এবং প্লেব্যাক স্ক্রিনে আপনার অ্যাপ খুলুন এবং প্লেব্যাক শুরু করুন।
  4. আবার ড্রাইভিং সিমুলেট করুন এবং প্লেব্যাক পজ হয়েছে কিনা তা যাচাই করুন।
    1. আপনার অ্যাপ MediaSession-এর সাথে ইন্টিগ্রেট করতে পারলে, adb shell cmd media_session dispatch play ব্যবহার করুন এবং যাচাই করুন যে প্লেব্যাক আবার শুরু হচ্ছে না।

Android Automotive OS-এর জন্য আপনার অ্যাপ অপ্টিমাইজ করা

গাড়িতে আপনার ব্যবহারকারীদের যথাসম্ভব সেরা অভিজ্ঞতা দিতে, Android Automotive OS-এর জন্য আপনার অ্যাপ তৈরি করার সময় নিম্নলিখিত বিষয়গুলি মনে রাখুন:

উইন্ডো ইনসেট ও ডিসপ্লে কাটআউট নিয়ে কাজ করা

অন্যান্য ফর্ম ফ্যাক্টরের মতো, Android Automotive OS-এ সিস্টেম UI এলিমেন্ট অন্তর্ভুক্ত থাকে, যেমন স্ট্যাটাস ও নেভিগেশন বার এবং আয়তাকার নয় এমন ডিসপ্লের জন্য সহায়তা।

ডিফল্ট হিসেবে, অ্যাপ এমন একটি জায়গায় ড্র করে যা সিস্টেম বার বা ডিসপ্লে কাটআউটের সাথে ওভারল্যাপ করে না। তবে, আপনি হয়ত চাইবেন যে আপনার অ্যাপ সিস্টেম বার লুকিয়ে রাখুক, সেগুলির পিছনে কন্টেন্ট ড্র করুক অথবা উইন্ডো ইনসেটের মধ্যে আপনার অ্যাপ লে-আউট করুন লিঙ্কে যেভাবে বর্ণনা করা হয়েছে সেইভাবে ডিসপ্লে কাটআউটে কন্টেন্ট দেখাক। আপনার অ্যাপ যদি এর মধ্যে কোনওটি করে, তাহলে Android Automotive OS ডিভাইসের ইকোসিস্টেম জুড়ে আপনার অ্যাপ কীভাবে ভালোভাবে কাজ করবে সেই সম্পর্কে বিস্তারিত জানতে নিম্নলিখিত সাবসেকশন দেখুন।

সিস্টেম বার, ইমারসিভ মোড ও এজ-টু-এজ রেন্ডারিং

গাড়িতে সিস্টেম বারের সাইজ ও পজিশন অন্যান্য ফর্ম ফ্যাক্টরের থেকে আলাদা হতে পারে। যেমন, নেভিগেশন বার স্ক্রিনের বাঁদিকে, ডানদিকে বা নিচে থাকতে পারে। এমনকি উপরে স্ট্যাটাস বার এবং নিচে নেভিগেশন বার থাকলেও (যেমন বেশিরভাগ ফোন এবং ট্যাবলেটে থাকে), এই এলিমেন্টগুলির সাইজ গাড়িতে অনেক বড় হতে পারে।

এছাড়াও, Android Automotive OS, OEM-কে নিয়ন্ত্রণ করতে দেয় যে অ্যাপ ইমারসিভ মোডে প্রবেশ করতে এবং সেখান থেকে বেরিয়ে আসতে সিস্টেম বার দেখাতে বা লুকাতে পারবে কিনা। যেমন, অ্যাপকে সিস্টেম বার লুকানো থেকে আটকানোর মাধ্যমে, OEM নিশ্চিত করতে পারে যে গাড়ির কন্ট্রোল, যেমন ক্লাইমেট কন্ট্রোল, স্ক্রিনে সবসময় অ্যাক্সেসযোগ্য। কোনও OEM যদি অ্যাপকে সিস্টেম বার কন্ট্রোল করা থেকে আটকায়, তাহলে সিস্টেম বার দেখানো বা লুকানোর জন্য কোনও অ্যাপ WindowInsetsController (বা WindowInsetsControllerCompat) API কল করলে কিছুই হয় না। আপনার অ্যাপ ইনসেট পরিবর্তন করতে পেরেছে কিনা তা কীভাবে শনাক্ত করবেন সে সম্পর্কে আরও জানতে show এবং hide-এর ডকুমেন্টেশন দেখুন।

একইভাবে, OEM-ও কন্ট্রোল করতে পারে যে অ্যাপ সিস্টেম বারের রঙ ও ট্রান্সলুসেন্সি সেট করতে পারবে কিনা, যাতে বার ও তার মধ্যে থাকা এলিমেন্ট সবসময় স্পষ্টভাবে দেখা যায়। আপনার অ্যাপ যদি এজ-টু-এজ ড্র করে, তাহলে চেক করে দেখুন যে সিস্টেম বারের পিছনে শুধুমাত্র নন-ক্রিটিক্যাল কন্টেন্ট ড্র করা হয়েছে কিনা। ডিভাইস OEM যদি বারের রঙ বা স্বচ্ছতা সেট করতে বাধা দেয়, তাহলে এই কন্টেন্ট দেখা নাও যেতে পারে।

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

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

অনিয়মিত আকারের ডিসপ্লেতে মানিয়ে নেওয়া

আয়তাকার ডিসপ্লে ছাড়াও, কিছু গাড়িতে অনিয়মিত আকারের স্ক্রিন থাকতে পারে, যেমন ছবি ১-এ দেখানো হয়েছে:

Android Automotive OS ডিভাইস যার ডিসপ্লে ডানদিকে
      বাঁকানো।
ছবি ১: Android Automotive OS ডিভাইস যার ডিসপ্লে ডানদিকে বাঁকানো। সবুজ অংশটি হল নিরাপদ আয়তক্ষেত্র যা কার্ভের ডিসপ্লে কাট-আউটের বাউন্ডিং বক্সের সাথে ওভারল্যাপ করে না।

আপনার অ্যাপ যদি এজ-টু-এজ রেন্ডার না করে, তাহলে নিরাপদ এলাকার মধ্যে রেন্ডার করার জন্য আপনাকে কিছু করতে হবে না।

আপনার অ্যাপ যদি এজ-টু-এজ রেন্ডার করে, তাহলে ডিসপ্লে কাটআউটের ক্ষেত্রে এটি কীভাবে কাজ করবে তা আপনি বেছে নিতে পারবেন। আপনি রিসোর্স ব্যবহার করে এটি করতে পারেন আপনার অ্যাপের থিম-এর জন্য android:windowLayoutInDisplayCutoutMode অ্যাট্রিবিউট সেট করে অথবা রানটাইমে উইন্ডোর layoutInDisplayCutoutMode অ্যাট্রিবিউট পরিবর্তন করে।

Android Automotive OS ডিভাইসে ডিসপ্লে কাট-আউটের ধরন মোবাইল ডিভাইসের থেকে আলাদা, তাই LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT বা LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES ব্যবহার করবেন না, কারণ এগুলি মোবাইল ডিভাইসের কাট-আউটের জন্য অপ্টিমাইজ করা হয়েছে। পরিবর্তে, কাটআউট সবসময় এড়াতে বা সবসময় প্রবেশ করতে LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER বা LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS ব্যবহার করুন। পরেরটি বেছে নেওয়ার সময়, ডিসপ্লে কাটআউট সম্পর্কিত API-এর ব্যাপারে আরও বিবরণ জানতে ডিসপ্লে কাটআউট সাপোর্ট দেখুন।

আপনার অ্যাপ ডিসপ্লে কাটআউট এরিয়াতে রেন্ডার করলে এবং আপনি Android Automotive OS ও মোবাইলের মধ্যে আলাদা আচরণ দেখতে চাইলে, আপনার অ্যাপ রানটাইমে এই আচরণ সেট করলে, নির্দেশিকার জন্য ফিচার বন্ধ করুন বিকল্প দেখুন এবং আপনার অ্যাপ রিসোর্স ফাইল ব্যবহার করে এই আচরণ সেট করলে, বিকল্প রিসোর্স ব্যবহার করুন বিকল্প দেখুন।

ফিচার বন্ধ করুন

আপনি যদি Android Automotive OS-এ আগে থেকে থাকা কোনও মোবাইল অ্যাপ উপলভ্য করেন, তাহলে নির্দিষ্ট কিছু ফিচার ও কার্যকারিতা প্রাসঙ্গিক বা উপলভ্য নাও হতে পারে। যেমন, গাড়িতে সাধারণত ক্যামেরা অ্যাক্সেস করার সুবিধা থাকে না। এছাড়াও, Android Automotive OS-এ Google Play পরিষেবার শুধুমাত্র একটি সাবসেট উপলভ্য; আরও বিবরণের জন্য গাড়ির জন্য Google Play পরিষেবা দেখুন।

অ্যাপটি Android Automotive OS-এ চলছে কিনা তা শনাক্ত করতে আপনি PackageManager.hasSystemFeature API ব্যবহার করতে পারেন। এর জন্য আপনাকে FEATURE_AUTOMOTIVE ফিচার চেক করতে হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
    // Enable or disable a given feature
}

বিকল্প হিসেবে, আপনার অ্যাপে Android Auto কম্পোনেন্ট থাকলে, গাড়ির জন্য Android অ্যাপ লাইব্রেরি থেকে CarConnection API ব্যবহার করে আপনি শনাক্ত করতে পারবেন যে অ্যাপটি Android Automotive OS বা Android Auto-তে চলছে কিনা —অথবা এটি গাড়ির সাথে আদৌ কানেক্ট করা আছে কিনা।

'ছবির-মধ্যে-ছবি' (PiP) ফিচারের জন্য, ফিচারটি উপলভ্য আছে কিনা তা চেক করতে এবং সেই অনুযায়ী প্রতিক্রিয়া জানাতে, পেশাদার পদ্ধতি অনুসরণ করুন।

অফলাইন পরিস্থিতি ম্যানেজ করা

গাড়িগুলি ক্রমবর্ধমানভাবে ইন্টারনেট কানেক্টেড হয়ে উঠছে, অ্যাপগুলিকে ইন্টারনেট কানেকশন ছাড়াই রান করার জন্য সাজেস্ট করা হয়, যেমন নিম্নলিখিত ক্ষেত্রে:

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

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

বিকল্প রিসোর্স ব্যবহার করুন

গাড়ির জন্য আপনার অ্যাপ মানানসই করতে, আপনি car রিসোর্স কোয়ালিফায়ার ব্যবহার করতে পারেন যাতে Android Automotive OS-এ চলা গাড়ির জন্য বিকল্প রিসোর্স প্রদান করা যায়। যেমন, আপনি প্যাডিং ভ্যালু স্টোর করার জন্য ডাইমেনশন রিসোর্স ব্যবহার করলে, টাচ টার্গেট বড় করার জন্য car রিসোর্স সেটের জন্য বড় ভ্যালু ব্যবহার করতে পারেন।