Android Automotive OS वाले डिवाइसों पर अपना ऐप्लिकेशन उपलब्ध कराते समय, आपको डिवाइस के नाप या आकार के हिसाब से कुछ बातों का ध्यान रखना चाहिए. इस गाइड में, इन बातों के बारे में बताया गया है.
Android Automotive OS एम्युलेटर पर अपने मौजूदा ऐप्लिकेशन की जांच करना
Android Automotive OS के लिए ऐप्लिकेशन बनाने से पहले, Android Automotive OS एम्युलेटर पर अपने मौजूदा ऐप्लिकेशन की जांच करें. एम्युलेटर सेट अप करने के लिए, Android Automotive OS एम्युलेटर का इस्तेमाल करके जांच करना लेख में दिया गया तरीका अपनाएं. इसके बाद, एम्युलेटर पर अपना ऐप्लिकेशन चलाएं में दिए गए निर्देशों का पालन करके, ऐप्लिकेशन को चलाया जा सकता है.
अपना ऐप्लिकेशन चलाते समय, साथ काम करने से जुड़ी समस्याओं पर ध्यान दें. जैसे:
- इंफ़ोटेनमेंट स्क्रीन का ओरिएंटेशन तय होता है. कार में इस्तेमाल होने वाले ऐप्लिकेशन की क्वालिटी से जुड़े दिशा-निर्देशों का पालन करने के लिए, ऐप्लिकेशन को पोर्ट्रेट और लैंडस्केप, दोनों ओरिएंटेशन के साथ काम करना चाहिए.
- ऐसा हो सकता है कि अन्य डिवाइसों पर उपलब्ध एपीआई, Android Automotive OS पर उपलब्ध न हों. उदाहरण के लिए, Google Play services के कुछ एपीआई, Android Automotive OS पर उपलब्ध नहीं हैं. इन समस्याओं को हल करने के तरीके के बारे में जानने के लिए, सुविधाएं बंद करें सेक्शन देखें.
Android स्किल
GitHub पर देखेंकार के लिए Android पर, गाड़ी पार्क होने पर इस्तेमाल किए जा सकने वाले ऐप्लिकेशन
android skills add android-for-cars-parked-appsअपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल को कॉन्फ़िगर करना
Android Automotive OS वाले डिवाइसों को टारगेट करने के लिए, आपके ऐप्लिकेशन के मेनिफ़ेस्ट में कुछ एंट्री होनी चाहिए. Android Automotive OS डिवाइसों पर ऐप्लिकेशन उपलब्ध कराने के लिए ऑप्ट-इन करने के बाद, Google Play उन ऐप्लिकेशन की समीक्षा करता है जो इन डिवाइसों के साथ काम करते हैं. इससे यह पक्का किया जाता है कि वे कार में इस्तेमाल करने के लिए सुरक्षित हैं. ज़्यादा जानकारी के लिए, कार में इस्तेमाल किए जाने वाले सिस्टम के लिए ऐप्लिकेशन उपलब्ध कराना देखें.
Android Automotive OS की ज़रूरी सुविधाएं
Android Automotive OS के लिए बनाए गए सभी ऐप्लिकेशन को Google Play पर उपलब्ध कराने के लिए, कुछ ज़रूरी शर्तें पूरी करनी होंगी. ज़्यादा जानकारी के लिए, Google Play की सुविधा से जुड़ी ज़रूरी शर्तें देखें.
कैटगरी के हिसाब से मेनिफ़ेस्ट एंट्री
पार्क किए गए सभी ऐप्लिकेशन पर लागू होने वाली ऊपर बताई गई ज़रूरी शर्तों के अलावा, वीडियो और गेम की कैटगरी के लिए कुछ और ज़रूरी शर्तें भी हैं:
- वीडियो ऐप्लिकेशन के लिए, अपने ऐप्लिकेशन को वीडियो ऐप्लिकेशन के तौर पर मार्क करना लेख पढ़ें.
- गेम के लिए, अपने ऐप्लिकेशन को गेम के तौर पर मार्क करना लेख पढ़ें.
ड्राइवर का ध्यान भटकने से रोकने के लिए तय की गई ज़रूरी शर्तें पूरी करना
कार में इस्तेमाल किए जाने वाले ऐप्लिकेशन बनाते समय, यह ध्यान रखना ज़रूरी है कि उनसे ड्राइवर का ध्यान न भटके. पार्क किए गए ऐप्लिकेशन के लिए, ऐसा मुख्य रूप से तब किया जाता है, जब उपयोगकर्ता अनुभव (यूएक्स) से जुड़ी पाबंदियां चालू हों. ऐसा करने से, आपके ऐप्लिकेशन को इस्तेमाल करने या ऑडियो चलाने से रोका जाता है. इस बारे में, DD-2 और DD-3 क्वालिटी के लिए दिशा-निर्देशों में बताया गया है.
उपयोगकर्ता अनुभव से जुड़ी पाबंदियां चालू होने पर, इस्तेमाल करने से रोकें
डिफ़ॉल्ट रूप से, यूएक्स से जुड़ी पाबंदियां चालू होने पर, गतिविधियों का इस्तेमाल नहीं किया जा सकता या उन्हें लॉन्च नहीं किया जा सकता. यह पक्का करने के लिए कि यह व्यवहार आपके ऐप्लिकेशन पर लागू हो, आपके मेनिफ़ेस्ट में मौजूद किसी भी <activity> एलिमेंट में, यह <meta-data> एलिमेंट शामिल नहीं होना चाहिए:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
अगर उपयोगकर्ता अनुभव से जुड़ी पाबंदियां चालू होने पर, आपके ऐप्लिकेशन में कोई ऐक्टिविटी फिर से शुरू होती है, तो ओएस की कोई ऐक्टिविटी उसे छिपा देती है.
कम से कम, आपके ऐप्लिकेशन की गतिविधि रुकी हुई लाइफ़साइकल स्थिति में बदल जाती है. ऐसा onPause लाइफ़साइकल कॉलबैक के तौर पर होता है. इस दौरान, आपको अपने ऐप्लिकेशन से वीडियो और ऑडियो, दोनों का प्लेबैक रोकना होगा.
जिन डिवाइसों में Android Automotive OS के साथ काम करने वाला मोड शामिल है उनमें सिस्टम ब्लॉक होने की वजह से, आपके ऐप्लिकेशन की गतिविधियां रोकी गई स्थिति से बंद की गई स्थिति में बदल जाती हैं.
वीडियो चलाना बंद करना और उसे फिर से चलाने से रोकना
कुछ ऐप्लिकेशन के लिए, onPause() के दौरान प्लेबैक को रोकना और onResume() तक प्लेबैक को फिर से शुरू होने से रोकने के लिए, स्थिति को ट्रैक करना ही ड्राइवर का ध्यान भटकने से रोकने की ज़रूरी शर्तों को पूरा करने के लिए काफ़ी है.
अगर लाइफ़साइकल कॉलबैक पर प्रतिक्रिया देना आपके ऐप्लिकेशन के लिए काफ़ी नहीं है, तो सीधे तौर पर उपयोगकर्ता अनुभव से जुड़ी पाबंदी की स्थिति को सुना जा सकता है. इसके बारे में यहां बताया गया है. उदाहरण के लिए, पिक्चर में पिक्चर की सुविधा देने वाले ऐप्लिकेशन, लाइफ़साइकल कॉलबैक में शर्त के हिसाब से जांच करने के बजाय, सीधे तौर पर सुनना पसंद कर सकते हैं.
उपयोगकर्ता अनुभव से जुड़ी पाबंदियों के बारे में सुनें
उपयोगकर्ता अनुभव से जुड़ी पाबंदियों के बारे में जानने के लिए, पहले अपने ऐप्लिकेशन मॉड्यूल की build.gradle फ़ाइल में, android.car लाइब्रेरी पर डिपेंडेंसी जोड़ें.
यह Android SDK टूल का एक एक्सटेंशन है. यह Android Automotive OS के लिए खास तौर पर बनाए गए एपीआई उपलब्ध कराता है.
android {
...
useLibrary("android.car")
}
यूएक्स पर लगी पाबंदी की स्थिति जानने के लिए, CarUxRestrictionsManager का इस्तेमाल करें. उपयोगकर्ता अनुभव से जुड़ी पाबंदी की स्थिति का पता लगाने के लिए, हार्डवेयर की अन्य स्थितियों का इस्तेमाल न करें. जैसे, गियर या स्पीड. ऐसा इसलिए, क्योंकि उपयोगकर्ता अनुभव से जुड़ी पाबंदियां, वाहन में मौजूद हर डिसप्ले के हिसाब से अलग-अलग हो सकती हैं.
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 में सिस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट शामिल होते हैं. जैसे, स्टेटस और नेविगेशन बार. साथ ही, इसमें नॉन-रेक्टैंगल डिसप्ले के लिए सहायता भी शामिल है.
डिफ़ॉल्ट रूप से, ऐप्लिकेशन ऐसे एरिया में ड्रॉ होते हैं जो सिस्टम बार या डिसप्ले कटआउट को ओवरलैप नहीं करता. हालांकि, हो सकता है कि आपको अपने ऐप्लिकेशन में सिस्टम बार छिपाने हों, उनके पीछे कॉन्टेंट दिखाना हो या डिसप्ले कटआउट में कॉन्टेंट दिखाना हो. इसके बारे में विंडो इनसेट में अपने ऐप्लिकेशन का लेआउट बनाएं में बताया गया है. अगर आपका ऐप्लिकेशन इनमें से कोई भी काम करता है, तो Android Automotive OS डिवाइसों के पूरे नेटवर्क पर अपने ऐप्लिकेशन को बेहतर तरीके से काम करने देने के बारे में जानकारी पाने के लिए, यहां दिए गए सब-सेक्शन देखें.
सिस्टम बार, इमर्सिव मोड, और एज-टू-एज रेंडरिंग
कार में सिस्टम बार का साइज़ और पोज़िशन, अन्य डिवाइसों से अलग हो सकती है. उदाहरण के लिए, नेविगेशन बार को स्क्रीन पर बाईं, दाईं या सबसे नीचे वाली जगह पर रखा जा सकता है. अगर टॉप पर स्टेटस बार और बॉटम में नेविगेशन बार मौजूद है, तो भी कार में इन एलिमेंट का साइज़ ज़्यादा होगा. ज़्यादातर फ़ोन और टैबलेट में ऐसा ही होता है.
इसके अलावा, Android Automotive OS की मदद से ओईएम यह कंट्रोल कर सकते हैं कि ऐप्लिकेशन, इमर्सिव मोड में जाने और उससे बाहर निकलने के लिए सिस्टम बार दिखा सकते हैं या छिपा सकते हैं. उदाहरण के लिए, ऐप्लिकेशन को सिस्टम बार छिपाने से रोककर, ओईएम यह पक्का कर सकते हैं कि गाड़ी के कंट्रोल, जैसे कि क्लाइमेट कंट्रोल, स्क्रीन पर हमेशा ऐक्सेस किए जा सकें. अगर किसी ओईएम ने ऐप्लिकेशन को सिस्टम बार कंट्रोल करने से रोका है, तो जब कोई ऐप्लिकेशन सिस्टम बार दिखाने या छिपाने के लिए WindowInsetsController (या WindowInsetsControllerCompat) एपीआई को कॉल करता है, तो कुछ नहीं होता. show और hide के दस्तावेज़ देखें. इससे आपको यह जानने में मदद मिलेगी कि आपके ऐप्लिकेशन ने इनसेट में बदलाव किया है या नहीं.
इसी तरह, ओईएम यह भी कंट्रोल कर सकते हैं कि ऐप्लिकेशन, सिस्टम बार का रंग और पारदर्शिता सेट कर सकते हैं या नहीं. इससे यह पक्का किया जा सकता है कि बार और उनमें मौजूद एलिमेंट हर समय साफ़ तौर पर दिखें. अगर आपका ऐप्लिकेशन, स्क्रीन के किनारों तक कॉन्टेंट दिखाता है, तो पक्का करें कि सिस्टम बार के पीछे सिर्फ़ ऐसा कॉन्टेंट दिखाया जाए जो ज़रूरी न हो. अगर डिवाइस का 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>
अगर आपका ऐप्लिकेशन एज-टू-एज मोड में काम करता है, तो सिस्टम बार के साइज़, संख्या, टाइप या जगह के बारे में अनुमान न लगाएं. इसके बजाय, विंडो इनसेट एपीआई का इस्तेमाल करें, ताकि सिस्टम बार के हिसाब से आपके ऐप्लिकेशन के कॉन्टेंट को लेआउट किया जा सके. इन एपीआई को इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, अपने ऐप्लिकेशन में कॉन्टेंट को एज-टू-एज दिखाएं लेख पढ़ें. किसी भी डिवाइस के लिए, हार्ड-कोड की गई पैडिंग वैल्यू का सुझाव नहीं दिया जाता. हालांकि, कारों में ये वैल्यू, कॉन्टेंट को सुरक्षित हिस्से में रखने के लिए बिलकुल भी काम नहीं करेंगी.
अलग-अलग आकार के डिसप्ले के हिसाब से अडजस्ट करना
रेक्टैंगल डिसप्ले के अलावा, कुछ गाड़ियों में अलग-अलग आकार की स्क्रीन हो सकती हैं, जैसा कि इमेज 1 में दिखाया गया है:
अगर आपका ऐप्लिकेशन, स्क्रीन के किनारों तक रेंडर नहीं होता है, तो आपको सुरक्षित हिस्से में रेंडर करने के लिए कुछ भी करने की ज़रूरत नहीं है.
अगर आपका ऐप्लिकेशन एज-टू-एज रेंडर होता है, तो आपके पास यह चुनने का विकल्प होता है कि डिसप्ले कटआउट के साथ यह कैसा दिखे. ऐसा करने के लिए, अपने ऐप्लिकेशन की थीम के लिए 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 का इस्तेमाल करें, ताकि कटआउट को हमेशा छिपाया जा सके या हमेशा दिखाया जा सके. दूसरा विकल्प चुनने पर, डिसप्ले कटआउट से जुड़े एपीआई के बारे में ज़्यादा जानकारी के लिए, डिसप्ले कटआउट के साथ काम करने वाले एपीआई देखें.
अगर आपका ऐप्लिकेशन डिसप्ले कटआउट एरिया में रेंडर होता है और आपको Android Automotive OS और मोबाइल के बीच अलग-अलग व्यवहार चाहिए, तो अगर आपका ऐप्लिकेशन रनटाइम के दौरान यह व्यवहार सेट करता है, तो दिशा-निर्देशों के लिए सुविधाएं बंद करें देखें. अगर आपका ऐप्लिकेशन रिसॉर्स फ़ाइलों का इस्तेमाल करके यह व्यवहार सेट करता है, तो वैकल्पिक संसाधनों का इस्तेमाल करें देखें.
सुविधाएं बंद करना
अगर किसी मौजूदा मोबाइल ऐप्लिकेशन को Android Automotive OS पर उपलब्ध कराया जा रहा है, तो हो सकता है कि कुछ सुविधाएं और फ़ंक्शन काम के न हों या उपलब्ध न हों. उदाहरण के लिए, आम तौर पर कारों में कैमरे का ऐक्सेस नहीं होता. इसके अलावा, Android Automotive OS पर Google Play services की कुछ ही सेवाएं उपलब्ध हैं. ज़्यादा जानकारी के लिए, कार के लिए Google Play services देखें.
PackageManager.hasSystemFeature एपीआई का इस्तेमाल करके, यह पता लगाया जा सकता है कि ऐप्लिकेशन, Android Automotive OS पर चल रहा है या नहीं. इसके लिए, FEATURE_AUTOMOTIVE सुविधा को देखें. इसके बारे में यहां दिए गए उदाहरण में बताया गया है:
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) if (isCar) { // Enable or disable a given feature }
इसके अलावा, अगर आपके ऐप्लिकेशन में Android Auto कॉम्पोनेंट भी है, तो कार के लिए Android ऐप्लिकेशन की लाइब्रेरी से CarConnection एपीआई का इस्तेमाल किया जा सकता है. इससे यह पता लगाया जा सकता है कि ऐप्लिकेशन, Android Automotive OS या Android Auto पर चल रहा है या नहीं. इसके अलावा, यह भी पता लगाया जा सकता है कि ऐप्लिकेशन, कार से कनेक्ट है या नहीं.
पिक्चर में पिक्चर (पीआईपी) मोड के लिए, तय किए गए सबसे सही तरीकों का पालन करें. इससे यह पता लगाया जा सकता है कि यह सुविधा उपलब्ध है या नहीं. साथ ही, इसके हिसाब से सही कार्रवाई की जा सकती है.
ऑफ़लाइन स्थितियों को मैनेज करना
कारें अब इंटरनेट से ज़्यादा कनेक्ट हो रही हैं. इसलिए, हमारा सुझाव है कि ऐप्लिकेशन को इंटरनेट कनेक्शन के बिना भी काम करने के लिए तैयार किया जाए. जैसे, इन मामलों में:
- ऐसा हो सकता है कि उपयोगकर्ता, वाहन बनाने वाली कंपनी के सदस्यता पैकेज के तहत मिलने वाले मोबाइल डेटा का इस्तेमाल न करें.
- ऐसा हो सकता है कि कुछ इलाकों में मोबाइल डेटा का ऐक्सेस सीमित हो.
- ऐसा हो सकता है कि वाई-फ़ाई रेडियो वाली कारें, वाई-फ़ाई की रेंज से बाहर हों या कोई ओईएम, मोबाइल नेटवर्क का इस्तेमाल करने के लिए वाई-फ़ाई बंद कर दे.
अपने ऐप्लिकेशन में ऐसी स्थितियों को हैंडल करने के लिए तैयार रहें. इसके लिए, इंटरनेट ऐक्सेस पर निर्भर सुविधाओं को धीरे-धीरे कम करें. जैसे, ऑफ़लाइन कॉन्टेंट उपलब्ध कराना. ज़्यादा जानकारी के लिए, नेटवर्किंग को ऑप्टिमाइज़ करने के सबसे सही तरीके देखें.
अन्य संसाधनों का इस्तेमाल करना
कार में अपने ऐप्लिकेशन को बेहतर तरीके से चलाने के लिए, car रिसॉर्स क्वालिफ़ायर का इस्तेमाल किया जा सकता है. इससे Android Automotive OS वाली कार में ऐप्लिकेशन चलाने पर, वैकल्पिक रिसॉर्स उपलब्ध कराए जा सकते हैं. उदाहरण के लिए, अगर पैडिंग वैल्यू को स्टोर करने के लिए डाइमेंशन रिसॉर्स का इस्तेमाल किया जाता है, तो car रिसॉर्स सेट के लिए बड़ी वैल्यू का इस्तेमाल किया जा सकता है. इससे टच टारगेट बड़े हो जाएंगे.