पार्क किए गए ऐप्लिकेशन में Android Automotive OS के लिए सहायता जोड़ना

Android Automotive OS वाले डिवाइसों पर अपना ऐप्लिकेशन उपलब्ध कराते समय, आपको डिवाइस के साइज़, डाइमेंशन या कॉन्फ़िगरेशन के हिसाब से कुछ बातों का ध्यान रखना होगा. इस गाइड में इन बातों के बारे में बताया गया है.

Android Automotive OS एम्युलेटर पर अपने मौजूदा ऐप्लिकेशन की जांच करना

Android Automotive OS के लिए अपना ऐप्लिकेशन बनाने की प्रोसेस शुरू करने के लिए, सबसे पहले Android Automotive OS एमुलेटर पर अपने मौजूदा ऐप्लिकेशन की जांच करें. एमुलेटर सेट अप करने के लिए, Android Automotive OS एमुलेटर का इस्तेमाल करके टेस्ट करना लेख में दिया गया तरीका अपनाएं. इसके बाद, एम्युलेटर पर अपना ऐप्लिकेशन चलाना लेख में दिए गए निर्देशों का पालन करके, ऐप्लिकेशन को चलाया जा सकता है.

ऐप्लिकेशन चलाते समय, साथ काम करने से जुड़ी समस्याओं पर ध्यान दें. जैसे:

अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल कॉन्फ़िगर करना

Android Automotive OS डिवाइसों को टारगेट करने के लिए, आपके ऐप्लिकेशन में कुछ मेनिफ़ेस्ट एंट्री होनी चाहिए. Android Automotive OS डिवाइसों पर ऐप्लिकेशन उपलब्ध कराने के लिए ऑप्ट-इन करने के बाद, उन ऐप्लिकेशन की मैन्युअल तौर पर समीक्षा की जाती है जो इस ऑपरेटिंग सिस्टम के साथ काम करते हैं. इससे यह पक्का करने में मदद मिलती है कि वे कार में इस्तेमाल करने के लिए सुरक्षित हैं. ज़्यादा जानकारी के लिए, कार के लिए डिस्ट्रिब्यूट करें देखें.

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"/>

अगर यूज़र एक्सपीरियंस से जुड़ी पाबंदियां चालू होने पर, आपके ऐप्लिकेशन में कोई गतिविधि फिर से शुरू हो जाती है, तो उसे ओएस के मालिकाना हक वाली गतिविधि से छिपा दिया जाता है.

कम से कम, आपके ऐप्लिकेशन की गतिविधि, रोकी गई लाइफ़साइकल स्टेटस पर ट्रांज़िशन हो जाती है. यह 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)
val carUxRestrictionsManager =
    car.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE) as CarUxRestrictionsManager

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

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

// 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 में स्टेटस और नेविगेशन बार जैसे सिस्टम यूज़र इंटरफ़ेस (यूआई) एलिमेंट शामिल होते हैं. साथ ही, यह नॉन-रेक्टैंगल डिसप्ले के साथ काम करता है.

डिफ़ॉल्ट रूप से, ऐप्लिकेशन ऐसे एरिया में ड्रॉ करते हैं जो सिस्टम बार या डिसप्ले के कट्सआउट से ओवरलैप न होता हो. हालांकि, हो सकता है कि आप अपने ऐप्लिकेशन में सिस्टम बार छिपाना चाहें, उनके पीछे कॉन्टेंट दिखाना चाहें या विंडो इनसेट में अपने ऐप्लिकेशन का लेआउट तय करना में बताए गए तरीके के मुताबिक, डिसप्ले कटआउट में कॉन्टेंट दिखाना चाहें. अगर आपका ऐप्लिकेशन इनमें से कोई भी काम करता है, तो Android Automotive OS डिवाइसों के पूरे नेटवर्क पर अपने ऐप्लिकेशन को बेहतर तरीके से काम करने देने के तरीके के बारे में जानने के लिए, नीचे दिए गए उप-सेक्शन देखें.

सिस्टम बार, इमर्सिव मोड, और एज-टू-एज रेंडरिंग

कार में सिस्टम बार का साइज़ और पोज़िशन, अन्य डिवाइसों के मुकाबले अलग हो सकती है. उदाहरण के लिए, नेविगेशन बार को स्क्रीन के बाईं, दाईं या नीचे की ओर रखा जा सकता है. भले ही, सबसे ऊपर स्टेटस बार और सबसे नीचे नेविगेशन बार हो (जैसा कि ज़्यादातर फ़ोन और टैबलेट में होता है), लेकिन कारों में इन एलिमेंट का साइज़ काफ़ी बड़ा होगा.

इसके अलावा, Android Automotive OS की मदद से ओईएम यह कंट्रोल कर सकते हैं कि ऐप्लिकेशन, इमर्सिव मोड में जाने और उससे बाहर निकलने के लिए, सिस्टम बार दिखाएं या छिपाएं. उदाहरण के लिए, ऐप्लिकेशन को सिस्टम बार छिपाने से रोककर, OEM यह पक्का कर सकते हैं कि गाड़ी के कंट्रोल, जैसे कि क्लाइमेट कंट्रोल हमेशा स्क्रीन पर ऐक्सेस किए जा सकें. अगर किसी OEM ने ऐप्लिकेशन को सिस्टम बार कंट्रोल करने से रोका है, तो सिस्टम बार दिखाने या छिपाने के लिए, ऐप्लिकेशन के WindowInsetsController (या WindowInsetsControllerCompat) एपीआई को कॉल करने पर कुछ नहीं होता. आपके ऐप्लिकेशन ने इनसेट में बदलाव किया है या नहीं, यह पता लगाने के तरीके के बारे में ज़्यादा जानने के लिए, 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>

अगर आपका ऐप्लिकेशन पूरे डिवाइस के स्क्रीन पर दिखता है, तो सिस्टम बार के साइज़, संख्या, टाइप या जगह के बारे में कोई अनुमान न लगाएं. इसके बजाय, सिस्टम बार के हिसाब से अपने ऐप्लिकेशन के कॉन्टेंट को व्यवस्थित करने के लिए, विंडो इनसेट एपीआई का इस्तेमाल करें. इन एपीआई का इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, अपने ऐप्लिकेशन में कॉन्टेंट को किनारे से किनारे तक दिखाना लेख पढ़ें. हार्ड कोड की गई पैडिंग वैल्यू का सुझाव, किसी भी फ़ॉर्म फ़ैक्टर के लिए कभी नहीं दिया जाता. हालांकि, कार में ये वैल्यू काम नहीं करेंगी, ताकि कॉन्टेंट को सुरक्षित जगह पर रखा जा सके.

अलग-अलग आकार के डिसप्ले के हिसाब से बदलना

रेक्टैंगल डिसप्ले के अलावा, कुछ वाहनों में अनियमित आकार वाली स्क्रीन हो सकती हैं. जैसे, पहली इमेज में दिखाया गया है:

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 का इस्तेमाल करके, हमेशा काट-छांट वाले हिस्से से बचें या उसमें हमेशा जाएं. डिसप्ले कट्स से जुड़े एपीआई के बारे में ज़्यादा जानकारी के लिए, डिसप्ले कट्स की सुविधा देखें.

अगर आपका ऐप्लिकेशन डिसप्ले के कटी हुई जगह पर रेंडर होता है और आपको Android Automotive OS और मोबाइल के बीच अलग-अलग व्यवहार चाहिए, तो अगर आपका ऐप्लिकेशन रनटाइम के दौरान यह व्यवहार सेट करता है, तो सुविधाओं को बंद करें देखें. अगर आपका ऐप्लिकेशन, रिसॉर्स फ़ाइलों का इस्तेमाल करके यह व्यवहार सेट करता है, तो अन्य रिसॉर्स का इस्तेमाल करें देखें.

सुविधाएं बंद करना

अगर किसी मौजूदा मोबाइल ऐप्लिकेशन को Android Automotive OS पर उपलब्ध कराया जा रहा है, तो हो सकता है कि कुछ सुविधाएं और फ़ंक्शन काम न करें या उपलब्ध न हों. उदाहरण के लिए, आम तौर पर कार में कैमरे का ऐक्सेस नहीं मिलता. इसके अलावा, Android Automotive OS पर Google Play services का सिर्फ़ एक सबसेट उपलब्ध है. ज़्यादा जानकारी के लिए, कार के लिए Google Play services देखें.

PackageManager.hasSystemFeature एपीआई का इस्तेमाल करके, यह पता लगाया जा सकता है कि ऐप्लिकेशन Android Automotive OS पर चल रहा है या नहीं. इसके लिए, FEATURE_AUTOMOTIVE सुविधा की जांच करें, जैसा कि इस उदाहरण में दिखाया गया है:

Kotlin

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

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

इसके अलावा, अगर आपके ऐप्लिकेशन में Android Auto कॉम्पोनेंट भी है, तो कार के लिए Android ऐप्लिकेशन लाइब्रेरी में मौजूद CarConnection एपीआई का इस्तेमाल करके पता लगाया जा सकता है कि ऐप्लिकेशन, Android Automotive OS या Android Auto पर काम कर रहा है या नहीं. इसके अलावा, यह भी पता लगाया जा सकता है कि ऐप्लिकेशन किसी कार से कनेक्ट है या नहीं.

पिक्चर में पिक्चर (पीआईपी) के लिए, सबसे सही तरीकों का पालन करें. इससे यह पता चलेगा कि यह सुविधा उपलब्ध है या नहीं. साथ ही, इस सुविधा के हिसाब से सही तरीके से प्रतिक्रिया दी जा सकेगी.

ऑफ़लाइन स्थितियों को मैनेज करना

कारें अब ज़्यादा से ज़्यादा इंटरनेट से कनेक्ट हो रही हैं. हालांकि, ऐप्लिकेशन को इंटरनेट कनेक्शन के बिना भी काम करने की सुविधा देनी चाहिए. जैसे:

  • उपयोगकर्ता, वाहन बनाने वाली कंपनी की सदस्यता के पैकेज में मिलने वाले मोबाइल डेटा से ऑप्ट-आउट कर सकते हैं.
  • कुछ इलाकों में मोबाइल डेटा का ऐक्सेस सीमित हो सकता है.
  • हो सकता है कि वाई-फ़ाई रेडियो वाली कारें वाई-फ़ाई की रेंज से बाहर हों या कोई OEM, मोबाइल नेटवर्क के लिए वाई-फ़ाई बंद कर दे.

अपने ऐप्लिकेशन में इन स्थितियों को मैनेज करने के लिए तैयार रहें. इसके लिए, इंटरनेट ऐक्सेस पर निर्भर करने वाली सुविधाओं को बेहतर तरीके से कम करें. जैसे, ऑफ़लाइन कॉन्टेंट उपलब्ध कराना. ज़्यादा जानकारी के लिए, नेटवर्किंग को ऑप्टिमाइज़ करने के सबसे सही तरीके देखें.

अन्य संसाधनों का इस्तेमाल करना

अपने ऐप्लिकेशन को कारों के हिसाब से बनाने के लिए, car रिसॉर्स क्वालिफ़ायर का इस्तेमाल किया जा सकता है. इससे, Android Automotive OS वाले वाहन पर ऐप्लिकेशन चलाते समय, दूसरे रिसॉर्स उपलब्ध कराए जा सकते हैं. उदाहरण के लिए, अगर पैडिंग वैल्यू को सेव करने के लिए डाइमेंशन रिसॉर्स का इस्तेमाल किया जाता है, तो टच टारगेट को बड़ा बनाने के लिए, car रिसॉर्स सेट के लिए बड़ी वैल्यू का इस्तेमाल किया जा सकता है.