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 ফিচার
Google Play ব্যবহার করে ডিস্ট্রিবিউট করার জন্য Android Automotive OS-এর জন্য তৈরি করা সব অ্যাপকে অবশ্যই নির্দিষ্ট কিছু প্রয়োজনীয়তা পূরণ করতে হবে। আরও তথ্যের জন্য Google Play ফিচারের প্রয়োজনীয়তা পূরণ করা লিঙ্ক দেখুন।
বিভাগ-নির্দিষ্ট ম্যানিফেস্ট এন্ট্রি
পার্ক করা সব অ্যাপের ক্ষেত্রে প্রযোজ্য পূর্ববর্তী প্রয়োজনীয়তা ছাড়াও, ভিডিও ও গেমের বিভাগে অতিরিক্ত প্রয়োজনীয়তা আছে:
- ভিডিও অ্যাপের জন্য, আপনার অ্যাপকে ভিডিও অ্যাপ হিসেবে চিহ্নিত করুন দেখুন।
- গেমের জন্য, আপনার অ্যাপকে গেম হিসেবে চিহ্নিত করুন দেখুন।
ড্রাইভারের অমনোযোগিতা সংক্রান্ত প্রয়োজনীয়তা পূরণ করা
আপনার অ্যাপ গাড়িতে ব্যবহার করার সময় ড্রাইভারের মনোযোগ যাতে বিঘ্নিত না হয় তা দেখা খুবই গুরুত্বপূর্ণ। পার্ক করা অ্যাপের ক্ষেত্রে, DD-2 এবং
DD-3 কোয়ালিটি নির্দেশিকায় উল্লেখ করা ব্যবহারকারীর অভিজ্ঞতা (UX) সংক্রান্ত বিধিনিষেধ
অ্যাক্টিভ থাকাকালীন আপনার অ্যাপকে ব্যবহার করা বা অডিও চালানো থেকে বিরত রাখার মাধ্যমে এটি মূলত সম্পন্ন করা হয়।
ব্যবহারকারীর অভিজ্ঞতা সংক্রান্ত বিধিনিষেধ অ্যাক্টিভ থাকাকালীন ব্যবহার আটকানো
সাধারণত, 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-এর রিটার্ন ভ্যালু।
অন্যান্য ভ্যালু শুধুমাত্র সেইসব অ্যাক্টিভিটির ক্ষেত্রে প্রাসঙ্গিক যেগুলি ডিস্ট্র্যাকশন
অপ্টিমাইজ করা হিসেবে চিহ্নিত করা হয়েছে।
আপনার প্রয়োগ পরীক্ষা করুন
নিচের পদ্ধতি অনুসরণ করে আপনার অ্যাপ ড্রাইভারের মনোযোগ বিভ্রান্তি সংক্রান্ত প্রয়োজনীয়তা পূরণ করছে কিনা তা যাচাই করুন:
- Google Play Store বা কম্প্যাটিবিলিটি মোড ছাড়া সিস্টেম ইমেজে আপনার অ্যাপ ইনস্টল করুন।
- লঞ্চার অ্যাপ গ্রিড খোলা রেখে, ড্রাইভিং সিমুলেট করুন এবং আপনার অ্যাপ খোলা যাচ্ছে না কিনা তা যাচাই করুন।
- ড্রাইভিং সিমুলেট করা বন্ধ করুন এবং প্লেব্যাক স্ক্রিনে আপনার অ্যাপ খুলুন এবং প্লেব্যাক শুরু করুন।
- আবার ড্রাইভিং সিমুলেট করুন এবং যাচাই করুন যে প্লেব্যাক পজ হয়ে গেছে।
- আপনার অ্যাপ
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: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 পরিষেবা দেখুন।
নিচের উদাহরণে দেখানো
FEATURE_AUTOMOTIVE
ফিচার চেক করে
অ্যাপটি Android Automotive OS-এ চলছে কিনা তা শনাক্ত করতে আপনি PackageManager.hasSystemFeature
API ব্যবহার করতে পারেন:
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
অথবা, আপনার অ্যাপে যদি Android Auto কম্পোনেন্ট থাকে, তাহলে আপনি
Android for Cars অ্যাপ লাইব্রেরি থেকে
CarConnection API ব্যবহার করে এটি শনাক্ত করতে পারবেন যে অ্যাপটি
Android Automotive OS বা Android Auto-তে চলছে কিনা —অথবা এটি কোনও গাড়ির সাথে
কানেক্ট করা আছে কিনা।
পিকচার-ইন-পিকচারের (PiP) জন্য, ফিচারটি উপলভ্য আছে কিনা তা চেক করতে এবং সেই অনুযায়ী প্রতিক্রিয়া জানাতে, আগে থেকে সেট করা পেশাদার পদ্ধতি অনুসরণ করুন।
অফলাইন পরিস্থিতি সামলানো
গাড়িগুলি ক্রমশই ইন্টারনেট কানেক্টেড হয়ে উঠছে, তাই অ্যাপগুলিকে ইন্টারনেট কানেকশন ছাড়াই রান করার জন্য সাজেস্ট করা হয়, যেমন নিম্নলিখিত ক্ষেত্রে:
- ব্যবহারকারী অটোমেকারদের সাবস্ক্রিপশন প্যাকেজের অংশ হিসেবে অফার করা মোবাইল ডেটা থেকে অপ্ট-আউট করতে পারেন।
- নির্দিষ্ট কিছু এলাকায় মোবাইল ডেটা অ্যাক্সেস সীমিত করা হতে পারে।
- ওয়াই-ফাই রেডিও সহ গাড়ি ওয়াই-ফাই রেঞ্জের বাইরে থাকতে পারে অথবা কোনও OEM মোবাইল নেটওয়ার্কের জন্য ওয়াই-ফাই বন্ধ করে দিতে পারে।
ইন্টারনেট অ্যাক্সেসের উপর নির্ভর করে এমন ফাংশনালিটি সুন্দরভাবে কমিয়ে দিয়ে আপনার অ্যাপে এইসব পরিস্থিতি সামলানোর জন্য প্রস্তুত থাকুন, যেমন অফলাইন কন্টেন্ট অফার করা। আরও তথ্যের জন্য, নেটওয়ার্কিং অপ্টিমাইজ করার পেশাদার পদ্ধতি দেখুন।
বিকল্প রিসোর্স ব্যবহার করা
গাড়ির জন্য আপনার অ্যাপকে মানিয়ে নিতে সাহায্য করতে, Android Automotive OS গাড়িতে চালানোর সময়
বিকল্প রিসোর্স প্রদান করতে
আপনি car রিসোর্স কোয়ালিফায়ার ব্যবহার করতে পারেন। যেমন, আপনি যদি
প্যাডিং ভ্যালু স্টোর করতে
ডাইমেনশন রিসোর্স ব্যবহার করেন, তাহলে আপনি car রিসোর্স সেটের জন্য আরও বড় ভ্যালু ব্যবহার করে
টাচ টার্গেট আরও বড় করতে পারেন।