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 Automotive OS वाले डिवाइसों को टारगेट करने के लिए, आपके ऐप्लिकेशन के मेनिफ़ेस्ट में कुछ एंट्री होनी चाहिए. Android Automotive OS वाले डिवाइसों पर अपना ऐप्लिकेशन उपलब्ध कराने के लिए ऑप्ट-इन करने के बाद, Google Play, उन ऐप्लिकेशन की समीक्षा करता है जो इन डिवाइसों के साथ काम करते हैं. इससे यह पक्का करने में मदद मिलती है कि ये ऐप्लिकेशन, कार में इस्तेमाल करने के लिए सुरक्षित हैं. ज़्यादा जानकारी के लिए, कारों के लिए ऐप्लिकेशन उपलब्ध कराना देखें.
Android Automotive OS की ज़रूरी सुविधाएं
Google Play का इस्तेमाल करके, Android Automotive OS के लिए बनाए गए सभी ऐप्लिकेशन को डिस्ट्रिब्यूट करने के लिए, कुछ ज़रूरी शर्तें पूरी करनी होंगी. ज़्यादा जानकारी के लिए, Google Play की सुविधाओं से जुड़ी ज़रूरी शर्तें पूरी करना देखें.
कैटगरी के हिसाब से मेनिफ़ेस्ट एंट्री
कार पार्क होने पर इस्तेमाल होने वाले सभी ऐप्लिकेशन पर लागू होने वाली ऊपर बताई गई ज़रूरी शर्तों के अलावा, वीडियो और गेम की कैटगरी के लिए अतिरिक्त ज़रूरी शर्तें भी हैं:
- वीडियो ऐप्लिकेशन के लिए, अपने ऐप्लिकेशन को वीडियो ऐप्लिकेशन के तौर पर मार्क करना देखें.
- गेम के लिए, अपने ऐप्लिकेशन को गेम के तौर पर मार्क करना देखें.
ड्राइवर का ध्यान भटकने से रोकने से जुड़ी ज़रूरी शर्तें पूरी करना
कार में इस्तेमाल होने वाले ऐप्लिकेशन को बनाते समय, यह पक्का करना ज़रूरी है कि ड्राइवर का ध्यान न भटके. कार पार्क होने पर इस्तेमाल होने वाले ऐप्लिकेशन के लिए, यह पक्का करने के लिए मुख्य तौर पर यह तरीका अपनाया जाता है कि जब उपयोगकर्ता अनुभव (यूएक्स) से जुड़ी पाबंदियां लागू हों, तब आपका ऐप्लिकेशन इस्तेमाल न किया जा सके या उससे ऑडियो न चलाया जा सके. इसकी जानकारी, क्वालिटी के लिए दिशा-निर्देशों DD-2 और DD-3 में दी गई है.
यूज़र एक्सपीरियंस से जुड़ी पाबंदियां लागू होने पर, ऐप्लिकेशन के इस्तेमाल को रोकना
डिफ़ॉल्ट रूप से, यूएक्स से जुड़ी पाबंदियां लागू होने पर, ऐप्लिकेशन की गतिविधियों का इस्तेमाल या उन्हें लॉन्च नहीं किया जा सकता. यह पक्का करने के लिए कि यह व्यवहार आपके ऐप्लिकेशन पर लागू हो, ज़रूरी है कि आपके
मेनिफ़ेस्ट में मौजूद किसी भी
<activity> एलिमेंट में, यह
<meta-data> एलिमेंट शामिल न हो:
<!-- NOT ALLOWED -->
<meta-data
android:name="distractionOptimized"
android:value="true"/>
अगर यूएक्स से जुड़ी पाबंदियां लागू होने पर, आपके ऐप्लिकेशन में कोई गतिविधि फिर से शुरू होती है, तो वह ओएस के मालिकाना हक वाली किसी गतिविधि से छिप जाती है.
कम से कम, आपके ऐप्लिकेशन की गतिविधि,
Paused लाइफ़साइकल की स्थिति में बदल जाती है. ऐसा onPause लाइफ़साइकल कॉलबैक के तौर पर होता है. इस दौरान, आपको अपने ऐप्लिकेशन से वीडियो और ऑडियो, दोनों का प्लेबैक रोकना होगा.
Android Automotive OS के साथ काम करने वाले मोड वाले डिवाइसों पर, सिस्टम के ब्लॉक करने की वजह से, आपके ऐप्लिकेशन की गतिविधियां Paused स्थिति से Stopped स्थिति में बदल जाती हैं.
प्लेबैक रोकना और उसे फिर से शुरू होने से रोकना
कुछ ऐप्लिकेशन के लिए, 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 के दस्तावेज़ देखें.
इसी तरह, ओईएम यह भी कंट्रोल कर सकते हैं कि ऐप्लिकेशन, सिस्टम बार का रंग और ट्रांसलूसेंसी सेट कर सकते हैं या नहीं. इससे यह पक्का किया जा सकता है कि बार और उनमें मौजूद एलिमेंट हर समय साफ़ तौर पर दिखें. अगर आपका ऐप्लिकेशन, एज-टू-एज ड्रॉ होता है, तो यह देखें कि सिस्टम बार के पीछे सिर्फ़ ऐसा कॉन्टेंट ड्रॉ हो जो ज़रूरी न हो. अगर डिवाइस ओईएम, बार का रंग या ट्रांसलूसेंसी सेट करने से रोकता है, तो हो सकता है कि यह कॉन्टेंट न दिखे.
<!-- 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>
अगर आपका ऐप्लिकेशन, एज-टू-एज ड्रॉ होता है, तो सिस्टम बार के साइज़, संख्या, टाइप या जगह के बारे में कोई अनुमान न लगाएं. इसके बजाय, सिस्टम बार के हिसाब से अपने ऐप्लिकेशन का कॉन्टेंट दिखाने के लिए, विंडो इनसेट एपीआई का इस्तेमाल करें. इन एपीआई का इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, अपने ऐप्लिकेशन में एज-टू-एज कॉन्टेंट दिखाना देखें. किसी भी डिवाइस के साइज़, डाइमेंशन या कॉन्फ़िगरेशन के हिसाब से बनाए गए ऐप्लिकेशन के लिए, हार्ड-कोड की गई पैडिंग वैल्यू का इस्तेमाल करने का सुझाव कभी नहीं दिया जाता. हालांकि, कारों में, इनसे कॉन्टेंट को सुरक्षित एरिया में रखने में मदद नहीं मिलेगी.
अनियमित आकार वाले डिसप्ले के हिसाब से बदलाव करना
रेक्टैंगुलर डिसप्ले के अलावा, कुछ वाहनों में अनियमित आकार वाली स्क्रीन भी हो सकती हैं. जैसे, पहली इमेज में दिखाया गया है:
अगर आपका ऐप्लिकेशन, एज-टू-एज रेंडर नहीं होता है, तो आपको सुरक्षित एरिया में रेंडर करने के लिए कुछ नहीं करना होगा.
अगर आपका ऐप्लिकेशन, एज-टू-एज रेंडर होता है, तो आपके पास यह चुनने का विकल्प होता है कि डिसप्ले कटआउट के हिसाब से, यह कैसे काम करे. इसके लिए, संसाधनों का इस्तेमाल किया जा सकता है
इसके लिए, अपने ऐप्लिकेशन की थीम के लिए 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 Automotive OS या Android Auto पर चल रहा है या नहीं, 'कार के लिए Android ऐप्लिकेशन' की लाइब्रेरी से CarConnection एपीआई का इस्तेमाल किया जा सकता है. साथ ही, इससे यह भी पता लगाया जा सकता है कि ऐप्लिकेशन, कार से कनेक्ट है या नहीं.
ऑफ़लाइन होने पर ऐप्लिकेशन के इस्तेमाल से जुड़ी स्थितियों को मैनेज करना
कारें, इंटरनेट से ज़्यादा कनेक्ट हो रही हैं. इसलिए, हमारा सुझाव है कि ऐप्लिकेशन को इंटरनेट कनेक्शन के बिना भी इस्तेमाल किया जा सके. जैसे, इन स्थितियों में:
- ऐसा हो सकता है कि उपयोगकर्ता, कार बनाने वाली कंपनी के सदस्यता पैकेज के तहत मिलने वाले मोबाइल डेटा से ऑप्ट-आउट कर लें.
- कुछ इलाकों में, मोबाइल डेटा का ऐक्सेस सीमित हो सकता है.
- ऐसा हो सकता है कि वाई-फ़ाई रेडियो वाली कारें, वाई-फ़ाई की रेंज से बाहर हों या ओईएम, मोबाइल नेटवर्क के लिए वाई-फ़ाई बंद कर दे.
अपने ऐप्लिकेशन में इन स्थितियों को मैनेज करने के लिए तैयार रहें. इसके लिए, इंटरनेट ऐक्सेस पर निर्भर करने वाली सुविधाओं को कम करें. जैसे, ऑफ़लाइन कॉन्टेंट उपलब्ध कराएं. ज़्यादा जानकारी के लिए, नेटवर्किंग को ऑप्टिमाइज़ करने के सबसे सही तरीके देखें.
वैकल्पिक रिसॉर्स इस्तेमाल करना
अपने ऐप्लिकेशन को कारों के लिए अडैप्ट करने में मदद पाने के लिए, car रिसॉर्स क्वालिफ़ायर
का इस्तेमाल किया जा सकता है. इससे, वैकल्पिक रिसॉर्स उपलब्ध कराए जा सकते हैं
जब Android Automotive OS वाले वाहन पर ऐप्लिकेशन चलाया जाता है. उदाहरण के लिए, अगर पैडिंग वैल्यू सेव करने के लिए
डाइमेंशन रिसॉर्स का इस्तेमाल किया जाता है, तो टच टारगेट को बड़ा बनाने के लिए, car रिसॉर्स सेट के लिए बड़ी वैल्यू का इस्तेमाल किया जा सकता है.