Android Auto और Android Automotive OS वाले वाहनों में, कार में मौजूद डिसप्ले का इस्तेमाल बढ़ रहा है. ऐसे में, डेवलपर को दोहरी चुनौती का सामना करना पड़ता है: वाहन पार्क होने पर, बेहतर और ज़रूरत के हिसाब से अनुभव देना और वाहन चलाते समय, ड्राइवर के लिए सुरक्षित और टेंप्लेट के हिसाब से अनुभव देना. इस 30 मिनट के तकनीकी सेशन में, हम Android ऐप्लिकेशन को कारों के लिए अडैप्ट करने के लिए, एंड-टू-एंड आर्किटेक्चर और डेवलपमेंट के तरीकों के बारे में जानेंगे.
इस सेशन में, आपको कार में इस्तेमाल किए जाने वाले ऐप्लिकेशन डिज़ाइन करने के बुनियादी सिद्धांतों के बारे में बताया जाएगा. साथ ही, मीडिया से जुड़े अनुभव तैयार करने के नए तरीकों के बारे में जानकारी दी जाएगी. जैसे, कार के ड्राइव मोड से पार्क मोड में जाने पर, ऑडियो से वीडियो पर स्विच करना. इस सेशन में, आपको अपने ऐप्लिकेशन को कार में इस्तेमाल करने के लिए ज़रूरी हर जानकारी मिलेगी.
ट्रांसक्रिप्ट
ठीक है।
सभी का स्वागत है.
'कार आपका कैनवस है' सेशन में शामिल होने के लिए धन्यवाद.
इस सेशन में, Android Auto के लिए ऐप्लिकेशन डेवलप करने के बारे में बताया जाएगा.
मेरा नाम पॉल लैमर्टस्मा है.
मैं थॉमस वेदर्स हूं.
हम कार के लिए Android टीम में डेवलपर रिलेशंस इंजीनियर हैं.
मुझे यकीन है कि आप में से कई लोगों ने यह पक्का करने के लिए काफ़ी समय और ऊर्जा खर्च की होगी कि आपके ऐप्लिकेशन, अलग-अलग तरह की स्क्रीन और डिवाइसों पर शानदार दिखें और अच्छी तरह से काम करें. जैसे, फ़ोन, फ़ोल्ड किए जा सकने वाले डिवाइस, टैबलेट वगैरह.
आज हम एक ऐसी स्क्रीन पर फ़ोकस करेंगे जिसके बारे में आपने शायद ही सोचा हो.
साथ ही, इससे आपको अपने उपयोगकर्ताओं तक एक यूनीक तरीके से पहुंचने में मदद मिल सकती है.
यह कार का डिसप्ले है.
चलिए, सबसे पहले हम कार के लिए Android के बारे में खास जानकारी देते हैं.
'कार के लिए Android' कोई एक चीज़ नहीं है.
आपके पास दो प्लैटफ़ॉर्म हैं जिन्हें टारगेट किया जा सकता है.
पहला, Android Auto. यह फ़ोन से चलने वाला एक प्रोजेक्टेड सिस्टम है.
Android Auto की मदद से, ऐप्लिकेशन आपके फ़ोन पर चलता है और वायर या वायरलेस कनेक्शन का इस्तेमाल करके, कार के डिसप्ले पर अपना यूज़र इंटरफ़ेस (यूआई) दिखाता है.
दूसरा है Android Automotive OS. यह Android का एक वैरिएंट है, जो सीधे वाहन पर काम करता है.
Android Automotive OS, फ़ोन से अलग काम करता है. इसके पास वाहन के हार्डवेयर का सीधा ऐक्सेस होता है. जैसे, क्लाइमेट कंट्रोल और रेडियो. साथ ही, यह अपने डेटा कनेक्शन को भी मैनेज करता है.
Android Automotive OS पर चलने वाली कुछ कारें, Google की बिल्ट-इन सुविधाओं वाली कारें होती हैं.
Google की बिल्ट-इन सुविधाओं वाली कारों में, Google के ऐप्लिकेशन और सेवाएं भी मिलती हैं. जैसे, Play Store, Gemini, और Google Maps.
भले ही, ये दो अलग-अलग प्लैटफ़ॉर्म हैं, लेकिन हमारा मकसद आपके लिए ऐप्लिकेशन बनाना आसान बनाना है. इससे आपको एक बार ऐप्लिकेशन बनाने के बाद, उसे दोनों प्लैटफ़ॉर्म पर डिप्लॉय करने की सुविधा मिलती है. साथ ही, दोनों प्लैटफ़ॉर्म पर उपयोगकर्ताओं को बेहतरीन अनुभव मिलता है.
यहां कार में इस्तेमाल किए जाने वाले ऐप्लिकेशन की लाइब्रेरी का इस्तेमाल करके बनाए गए मीडिया ऐप्लिकेशन का उदाहरण दिया गया है. साथ ही, यह भी बताया गया है कि यह Android Auto और Android Automotive OS, दोनों पर अलग-अलग साइज़ और शेप के डिसप्ले पर कैसा दिखेगा.
आपके पास कई तरह के डिवाइसों और प्लैटफ़ॉर्म के लिए ऐप्लिकेशन बनाने का विकल्प होता है.
इसलिए, यह सवाल उठता है कि कारों के लिए ऐसा क्यों है?
सबसे पहले, यहां का स्केल बहुत बड़ा है.
आज के समय में, 25 करोड़ से ज़्यादा कारों में Android Auto का इस्तेमाल किया जा सकता है. साथ ही, 16 अलग-अलग ब्रैंड की 100 से ज़्यादा कारों में Google की बिल्ट-इन सुविधाएं मौजूद हैं.
कार में आपके ऐप्लिकेशन उपलब्ध होने पर, उपयोगकर्ताओं तक तब भी पहुंचा जा सकता है, जब वे रोज़ाना यात्रा कर रहे हों, परिवार के साथ कहीं जा रहे हों, छोटे-मोटे काम कर रहे हों, और रोड ट्रिप पर हों.
अमेरिका में, एएए के 2024 अमेरिकन ड्राइविंग सर्वे के मुताबिक, ड्राइवर हर दिन औसतन 60 मिनट गाड़ी चलाते हैं.
हालांकि, उपयोगकर्ताओं तक सिर्फ़ तब नहीं पहुंचा जा सकता, जब वे गाड़ी चला रहे हों.
आपकी कार पार्क होने पर भी, आपको ये सूचनाएं मिलेंगी.
हो सकता है कि वे ईवी चार्जिंग स्टेशन पर अपना वाहन चार्ज कर रहे हों या स्कूल से बच्चों को पिक-अप करने के लिए लाइन में खड़े हों.
साथ ही, यात्रियों के लिए खास तौर पर बनाए गए डिसप्ले की लोकप्रियता बढ़ने के साथ, हमें उम्मीद है कि आने वाले समय में उपयोगकर्ताओं के साथ जुड़ाव बढ़ाने के और भी मौके मिलेंगे.
ठीक है।
अब देखते हैं कि कारों के लिए किस तरह के अनुभव बनाए जा सकते हैं.
कार के लिए ऐप्लिकेशन बनाने का तरीका समझने के लिए, यह जानना ज़रूरी है कि वाहन में ऐप्लिकेशन इस्तेमाल करते समय, कौनसी दो मुख्य स्थितियां और स्थितियां मौजूद होती हैं.
पहले, ऐसे ऐप्लिकेशन जिन्हें गाड़ी चलाते समय इस्तेमाल किया जाता है.
ये ऐप्लिकेशन, ड्राइविंग के दौरान इस्तेमाल करने के लिए ऑप्टिमाइज़ किए गए हैं. इन्हें गाड़ी चलाते समय इस्तेमाल किया जा सकता है.
इसमें स्क्रीन पर दिख रही कैटगरी के ऐप्लिकेशन शामिल हैं. जैसे, ऑडियो ऐप्लिकेशन, जिन्हें हम आम तौर पर मीडिया, मैसेजिंग, और कम्यूनिकेशन ऐप्लिकेशन, नेविगेशन वगैरह कहते हैं.
ड्राइविंग के लिए ऑप्टिमाइज़ किए गए अनुभवों को, ध्यान भटकने से बचाने के लिए तय की गई सख्त शर्तों का पालन करना चाहिए.
किसी ऐप्लिकेशन के लिए यूज़र इंटरफ़ेस (यूआई) बनाते समय, कुछ खास बातों का ध्यान रखना ज़रूरी है. इससे, गाड़ी चलाते समय ऐप्लिकेशन को सुरक्षित तरीके से इस्तेमाल किया जा सकता है.
ड्राइविंग के लिए ऑप्टिमाइज़ किए गए ऐप्लिकेशन बनाने के कई तरीके हैं.
हालांकि, इस बातचीत में हम खास तौर पर, Car App Library का इस्तेमाल करने पर फ़ोकस करेंगे.
यह Jetpack लाइब्रेरी का एक सेट है, जो टेंप्लेट वाला फ़्रेमवर्क उपलब्ध कराता है. यह फ़्रेमवर्क, ड्राइविंग के लिए ऑप्टिमाइज़ किए गए यूज़र इंटरफ़ेस उपलब्ध कराता है. साथ ही, यह कारों में मौजूद अलग-अलग हार्डवेयर कॉन्फ़िगरेशन के हिसाब से काम करता है.
इसलिए, इनपुट के तरीकों, स्क्रीन के साइज़, और आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) के बारे में सोचें.
हालांकि, कार में ड्राइविंग के दौरान बेहतर अनुभव देने के लिए, यह इकलौता तरीका नहीं है. इस बातचीत में, मेरा फ़ोकस कार के लिए Android ऐप्लिकेशन की लाइब्रेरी का इस्तेमाल करके ऐप्लिकेशन बनाने पर है.
हम इसे CAL भी कहते हैं.
जैसा कि मैंने अभी बताया, कार के लिए ऐप्लिकेशन लाइब्रेरी, लाइब्रेरी का एक सेट है. इसकी मदद से, वाहनों में इस्तेमाल किए जाने वाले ऐप्लिकेशन बनाए जा सकते हैं.
यह एक टेंप्लेट वाला फ़्रेमवर्क है, जो ड्राइविंग के लिए ऑप्टिमाइज़ किए गए यूज़र इंटरफ़ेस उपलब्ध कराता है. साथ ही, यह अलग-अलग हार्डवेयर कॉन्फ़िगरेशन के हिसाब से काम करता है.
साथ ही, अपना ऐप्लिकेशन बनाएं और भरोसा रखें कि यह अलग-अलग तरह के सभी कॉन्फ़िगरेशन पर अच्छा परफ़ॉर्म करेगा. भले ही, वे Android Auto या Android Automotive OS पर चल रहे हों.
CAL का इस्तेमाल करके बनाए गए ऐप्लिकेशन, इस होस्ट क्लाइंट आर्किटेक्चर पर भरोसा कर सकते हैं.
होस्ट ऐप्लिकेशन, सिस्टम रेंडरर होता है. यह Android Auto या Google की बिल्ट-इन सुविधाओं वाली कारों के लिए, Google Automotive App Host होता है.
यह तय करता है कि उपयोगकर्ता को उसके डिसप्ले पर क्या दिखाना है.
इसलिए, ऐप्लिकेशन डेवलपर के तौर पर, आपको पिक्सल ड्रॉ करने की ज़रूरत नहीं होती.
इसके बजाय, आपको कार के ऐप्लिकेशन की लाइब्रेरी के टेंप्लेट में स्ट्रक्चर्ड डेटा और अपने डेटा की स्थिति को फ़ीड करना होगा.
इसके बाद, यह होस्ट इस डेटा को लेता है और उसे सुरक्षित तरीके से ड्रॉ करता है. इसके लिए, वह सुरक्षा के नियमों का पालन करता है और डिस्ट्रैक्शन ऑप्टिमाइज़ेशन वाले लेआउट का इस्तेमाल करता है.
चलिए, अब CAL में मौजूद क्लास पर नज़र डालते हैं. साथ ही, यह जानते हैं कि ऐप्लिकेशन बनाने के लिए आपको किन क्लास को एक्सटेंड करना होगा. इसकी शुरुआत CarAppService से करते हैं.
यह Android सेवा की एक सबक्लास है. यह होस्ट ऐप्लिकेशन के लिए, क्लाइंट ऐप्लिकेशन के साथ कम्यूनिकेट करने के लिए एंट्री पॉइंट के तौर पर काम करती है. इसका मकसद, सेशन इंस्टेंस बनाना है. इसके बाद, होस्ट इन इंस्टेंस के साथ इंटरैक्ट करता है.
सेशन को वाहन के डिसप्ले पर चल रहे क्लाइंट ऐप्लिकेशन के इंस्टेंस के तौर पर समझा जा सकता है.
Android के अन्य कॉम्पोनेंट की तरह, इसकी भी अपनी लाइफ़ साइकल होती है. इसका इस्तेमाल, सेशन के इंस्टेंस के दौरान इस्तेमाल किए गए संसाधनों को शुरू करने और उन्हें हटाने के लिए किया जा सकता है.
यह CarAppService और सेशन के बीच वन-टू-मेनी रिलेशनशिप है.
उदाहरण के लिए, CarAppService में दो सेशन इंस्टेंस हो सकते हैं. एक प्राइमरी डिसप्ले के लिए और दूसरा क्लस्टर डिसप्ले के लिए. यह उन नेविगेशन ऐप्लिकेशन के लिए होता है जो क्लस्टर स्क्रीन के साथ काम करते हैं.
यहां इसका एक उदाहरण दिया गया है. इसमें एक कार में प्राइमरी डिसप्ले और क्लस्टर डिसप्ले है. हर डिसप्ले, एक खास सेशन से जुड़ा है. ऐप्लिकेशन डेवलपर के तौर पर, आपको भी एक से ज़्यादा डिसप्ले वाली गाड़ियों के लिए इसी तरह से ऐप्लिकेशन बनाना चाहिए.
इसके बाद, किसी सेशन के दौरान स्क्रीन इंस्टेंस, होस्ट ऐप्लिकेशन से रेंडर किए गए यूज़र इंटरफ़ेस जनरेट करते हैं.
इन यूज़र इंटरफ़ेस को टेंप्लेट क्लास से दिखाया जाता है. हर टेंप्लेट क्लास, किसी खास तरह के लेआउट को मॉडल करती है. उदाहरण के लिए, ग्रिड या सूची.
इसलिए, हर सेशन में स्क्रीन इंस्टेंस का एक स्टैक मैनेज किया जाता है. यह स्टैक, आपके ऐप्लिकेशन के अलग-अलग हिस्सों में यूज़र फ़्लो को मैनेज करता है. सेशन की तरह ही, स्क्रीन की भी अपनी लाइफ़ साइकल होती है, जिसे हुक किया जा सकता है.
हालांकि, सिर्फ़ इसलिए कि होस्ट आपके यूज़र इंटरफ़ेस (यूआई) को रेंडर कर रहा है और कार में इस्तेमाल किए जाने वाले ऐप्लिकेशन की लाइब्रेरी के टेंप्लेट इस्तेमाल किए जा रहे हैं, इसका मतलब यह नहीं है कि आप पर पाबंदियां हैं या ऐप्लिकेशन को पसंद के मुताबिक नहीं बनाया जा सकता.
आपके पास इस्तेमाल करने के लिए कई टेंप्लेट और कॉम्पोनेंट हैं. साथ ही, अपनी पसंद के मुताबिक अनुभव पाने के लिए, उन्हें मिक्स और मैच भी किया जा सकता है.
कुछ टेंप्लेट सामान्य कामों के लिए होते हैं. इनका इस्तेमाल, Car App Library में मौजूद सभी तरह के ऐप्लिकेशन के लिए किया जा सकता है. कुछ टेंप्लेट खास कामों के लिए होते हैं. इनका इस्तेमाल, ऐप्लिकेशन के खास अनुभवों के लिए किया जाता है. जैसे, नेविगेशन या लोकप्रिय जगहें.
ड्राइविंग के लिए ऑप्टिमाइज़ किए गए अनुभव बनाने के बारे में ज़्यादा जानने से पहले, मैं आपको एक और स्थिति के बारे में बताना चाहता हूँ जिसमें कार में ऐप्लिकेशन चलाए जा सकते हैं: जब कार पार्क की गई हो.
ऐप्लिकेशन की कुछ कैटगरी ऐसी हैं जिन्हें सिर्फ़ तब इस्तेमाल किया जा सकता है, जब गाड़ी पार्क की गई हो. इनमें वीडियो ऐप्लिकेशन, गेम, और ब्राउज़र शामिल हैं.
हालांकि, जब कार नहीं चल रही होती है, तो ड्राइवर का ध्यान भटकने से रोकने के लिए बनाए गए दिशा-निर्देश लागू नहीं होते. ऐसे में, आपके पास अपने मौजूदा अडैप्टिव यूज़र इंटरफ़ेस (यूआई) के हिसाब से ज़्यादा बेहतर अनुभव देने का विकल्प होता है.
पार्क किए गए ऐप्लिकेशन, गतिविधि पर आधारित होते हैं. ये फ़ोन या टैबलेट जैसे अन्य डिवाइसों पर इस्तेमाल की जाने वाली गतिविधियों से मिलते-जुलते या उनके जैसे ही होते हैं. हम अगले सेक्शन में, पार्क किए गए ऐप्लिकेशन के बारे में ज़्यादा जानकारी देंगे.
पार्क की गई कार में ऐप्लिकेशन इस्तेमाल करने के अनुभव के लिए, अडैप्टिव ऐक्टिविटी का फिर से इस्तेमाल किया जाता है. हालांकि, कार के लिए क्वालिटी से जुड़े कुछ खास दिशा-निर्देश अब भी मौजूद हैं जिनका आपको पालन करना होगा. इनमें मेनिफ़ेस्ट एलान और डिसप्ले कटआउट से लेकर, कार के चलने पर वीडियो चलाना रोकना शामिल है.
इस काम को ऑटोमेट करने के लिए, हमने गाड़ी पार्क होने पर इस्तेमाल होने वाले ऐप्लिकेशन के लिए, Android की एक नई सुविधा लॉन्च की है.
इसलिए, शुरू करने से पहले पक्का करें कि आपने Android का सीएलआई इंस्टॉल किया हो. इसे इस छोटे लिंक से ढूंढा जा सकता है.
इसके बाद, हमारे पास-- इसे सेट अप करने के बाद, उपलब्ध स्किल को एक्सप्लोर करने के लिए android skills list चलाएं.
android skills list
android skills add android-for-cars-parked-appsऐसे कई कौशल हैं जिनका इस्तेमाल करके, Android डेवलपमेंट को अगले लेवल पर ले जाया जा सकता है.
खास तौर पर, कार के लिए Android के लिए, android skills add android-for-cars-parked-apps का इस्तेमाल करके, एजेंट के कॉन्टेक्स्ट में स्किल जोड़ी जा सकती है.
अब आपका पसंदीदा एआई एजेंट चाहे जो भी हो, वह आपको Android Auto या Android Automotive OS के लिए मेनिफ़ेस्ट को कॉन्फ़िगर करने, कार की विंडो के इनसेट और पीछे जाने की प्रोसेस जैसी चीज़ों को मैनेज करने, और ड्राइवर का ध्यान भटकने से रोकने के लिए वीडियो चलाने से जुड़ी पाबंदियां लागू करने के बारे में सिलसिलेवार तरीके से जानकारी देता है. साथ ही, Google Play पर सबमिट करने से पहले, आपके वीडियो, गेम या ब्राउज़र ऐप्लिकेशन की जांच भी कर सकता है.
इसलिए, कारों के लिए ऐप्लिकेशन बनाना भी थोड़ा अलग है, क्योंकि इन ऐप्लिकेशन की कैटगरी का कॉन्सेप्ट अलग होता है.
जैसा कि मैंने पहले बताया था, कुछ कैटगरी के ऐप्लिकेशन गाड़ी चलाते समय इस्तेमाल किए जा सकते हैं. वहीं, अन्य कैटगरी के ऐप्लिकेशन गाड़ी पार्क रहने के दौरान इस्तेमाल किए जा सकते हैं.
हाइलाइट की गई इन कैटगरी का इस्तेमाल, गाड़ी चलाते समय किया जा सकता है.
इनमें से कुछ को सीएएल के तौर पर दिखाया जाता है. जैसा कि मैंने बताया, यह कार ऐप्लिकेशन की लाइब्रेरी है. इस कैटगरी के ऐप्लिकेशन, उन टेंप्लेट का इस्तेमाल करते हैं जिन्हें हमने कुछ समय पहले देखा था.
अब मैं आपको इनके बारे में फटाफट बता देता हूं. मैं ज़्यादा जानकारी नहीं दूंगा.
मीडिया ऐप्लिकेशन से शुरुआत करते हैं. ये ऐसे ऐप्लिकेशन हैं जो ऑडियो चलाते हैं, वीडियो नहीं.
इन्हें बनाने के दो तरीके हैं.
यहां सबसे ऊपर मौजूद MediaBrowserService, सबसे आसान विकल्प है.
आपको सिर्फ़ मेटाडेटा उपलब्ध कराना होता है. इसके बाद, इंफ़ोटेनमेंट स्क्रीन इंटरफ़ेस, कार के हिसाब से ऑप्टिमाइज़ किए गए तरीके से प्लेबैक और मीडिया ब्राउज़र यूज़र इंटरफ़ेस (यूआई) को रेंडर करने का पूरा ध्यान रखता है.
दूसरा विकल्प, Car App Library का इस्तेमाल करके मीडिया ऐप्लिकेशन बनाना है. इससे आपको मीडिया ऐप्लिकेशन की स्टाइल और प्रज़ेंटेशन को पसंद के मुताबिक बनाने के लिए, ज़्यादा कंट्रोल और विकल्प मिलते हैं. थॉमस कुछ ही देर में हमें इसके बारे में ज़्यादा जानकारी देंगे.
नेविगेशन ऐप्लिकेशन, Android Auto के लिए सबसे अहम हैं. ये रास्ते और मोड़-दर-मोड़ निर्देश देते हैं.
राइडशेयर ड्राइवर ऐप्लिकेशन भी इसी कैटगरी में आते हैं.
दिलचस्पी की जगहें दिखाने वाले ऐप्लिकेशन, आस-पास की काम की जगहों को ढूंढने में मदद करते हैं. जैसे, ईवी चार्जर या पार्किंग की जगहें.
इंटरनेट ऑफ़ थिंग्स या IoT ऐप्लिकेशन की मदद से, स्मार्ट डिवाइसों को कहीं से भी ऐक्सेस किया जा सकता है. जैसे, होम मैनेजमेंट.
मौसम की जानकारी देने वाले ऐप्लिकेशन भी उपलब्ध हैं. ये रीयल-टाइम रडार, तूफ़ान की चेतावनियां, और जगह के हिसाब से मौसम के पूर्वानुमान जैसी सुविधाएं दे सकते हैं.
आखिर में, कम्यूनिकेशन को तीन सब-कैटगरी में बांटा गया है: कार में बुनियादी सूचनाएं दिखाना, मैसेजिंग ऐप्लिकेशन, और वीडियो कॉलिंग ऐप्लिकेशन.
इसके बाद, पार्क की गई कैटगरी आती हैं: वीडियो स्ट्रीमिंग ऐप्लिकेशन, गेम, और वेब ब्राउज़र.
हमें यह बताते हुए खुशी हो रही है कि कुछ हफ़्ते पहले से, Android Auto और Android Automotive OS पर गेम पब्लिश करने की सुविधा सभी डेवलपर के लिए उपलब्ध है.
आपको दिखेगा कि इनमें से कुछ कैटगरी के लिए 'सभी के लिए उपलब्ध है', कुछ के लिए 'बीटा वर्शन में है', और कुछ के लिए 'जल्द आ रहा है' लिखा है.
'खुला है' का मतलब है कि कोई भी डेवलपर इस कैटगरी में, सीधे प्रोडक्शन में ऐप्लिकेशन सबमिट कर सकता है.
बीटा का मतलब है कि ऐप्लिकेशन को इंटरनल या क्लोज़्ड ट्रैक पर पब्लिश किया जा सकता है. हालांकि, इसे प्रोडक्शन में तब तक पब्लिश नहीं किया जा सकता, जब तक आपको Early access program में शामिल नहीं किया जाता.
इनमें से हर कैटगरी के दस्तावेज़ में ज़्यादा जानकारी और दिलचस्पी दिखाने वाले फ़ॉर्म का लिंक शामिल होता है.
'जल्द आ रहा है' स्टेटस उन कैटगरी के लिए है जो फ़िलहाल उपलब्ध नहीं हैं. हालांकि, आने वाले समय में हम इन्हें उपलब्ध कराने की योजना बना रहे हैं.
हमारा मकसद, इस प्लैटफ़ॉर्म को एक ही जगह पर उपलब्ध कराना है.
हम चाहते हैं कि आप एक बार कोड लिखकर, Android Auto और Android Automotive OS, दोनों के लिए ऐप्लिकेशन बना सकें और ज़्यादा से ज़्यादा लोगों तक पहुंच सकें. इससे कोई फ़र्क़ नहीं पड़ता कि ऐप्लिकेशन किस कैटगरी का है.
अब थॉमस आपको मीडिया के बारे में बताएंगे.
धन्यवाद.
बहुत बढ़िया.
इसलिए, पिछले साल हमने मीडिया ऐप्लिकेशन के लिए, Car App Library के 1.8 वर्शन को लॉन्च किया था. इससे Android Auto में, टेंप्लेट वाले ब्राउज़िंग यूज़र इंटरफ़ेस (यूआई) और कस्टम ऐक्शन की सुविधा उपलब्ध हुई.
इसमें मीडिया प्लेबैक टेंप्लेट शामिल था, जो यहां बाईं ओर दिख रहा है.
इस साल I/O में, हमने Car App Library 1.9 के ज़रिए ब्राउज़ किए जा सकने वाले ज़्यादा यूज़र इंटरफ़ेस (यूआई) पेश किए.
CAL 1.9 के बीटा वर्शन में उपलब्ध होने के बाद, अब Android Auto और Automotive OS पर मुख्य सुविधाओं के अपडेट इस्तेमाल किए जा सकते हैं.
इसकी मुख्य सुविधाओं में, ऐप्लिकेशन एक्सप्रेशन के ज़रिए ब्रैंड को पसंद के मुताबिक बनाने की सुविधा शामिल है. इससे आपको सुरक्षा के नियमों का पालन करते हुए, होस्ट-रेंडर किए गए लेआउट के साथ कलर और शेप टोकन को अपनी पसंद के मुताबिक बनाने की सुविधा मिलती है. साथ ही, इसमें स्पॉटलाइट सेक्शन, कम शब्दों में जानकारी देने वाले लिस्ट आइटम, स्क्रोल की जा सकने वाली चिप, और हमेशा दिखने वाले मिनी-प्लेयर जैसे नए यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट भी शामिल हैं.
इसके अलावा, CAL 1.9 में AAOS के लिए मीडिया टेंप्लेट की सुविधा को पूरी तरह से उपलब्ध कराया गया है. इससे दोनों नेटवर्क को एक ही प्लैटफ़ॉर्म पर लाया जा सकता है.
कार ऐप्लिकेशन लाइब्रेरी का अगला वर्शन जल्द ही उपलब्ध होगा: CAL वर्शन 10.
CAL के वर्शन 10 में, बातचीत करने के लिए इस्तेमाल होने वाले ऐप्लिकेशन के लिए, ज़्यादा कस्टम टेंप्लेट उपलब्ध होंगे. इससे, ड्राइव करते समय कॉल करने का ज़्यादा बेहतर और पसंद के मुताबिक अनुभव मिलेगा.
साथ ही, हम ऐप्लिकेशन की एक नई कैटगरी और ऐप्लिकेशन के लिए टेंप्लेट भी शामिल करते हैं. इनमें ड्राइविंग के दौरान बातचीत करने की सुविधा होती है.
आखिर में, कार में इस्तेमाल किए जाने वाले ऐप्लिकेशन की लाइब्रेरी के टेंप्लेट में और भी सुविधाएं जोड़ी जा रही हैं. इससे पार्क-टू-ड्राइव ट्रांज़िशन को और भी आसान बनाया जा सकेगा.
जल्द ही आने वाली अन्य सुविधाओं के बारे में जानने के लिए हमारे साथ बने रहें.
कार के लिए ऐप्लिकेशन लाइब्रेरी का इस्तेमाल करके, पार्क-टू-ड्राइव की सुविधाएं आपके ऐप्लिकेशन को डाइनैमिक तौर पर मोड बदलने और गाड़ी के रुकने पर, ज़रूरत के हिसाब से कॉन्टेंट दिखाने की अनुमति देती हैं. साथ ही, गाड़ी चलाते समय, कार के लिए ऐप्लिकेशन लाइब्रेरी के टेंप्लेट पर आसानी से वापस जाने की अनुमति देती हैं.
इसके मुख्य ऐप्लिकेशन में, गाड़ी के रुकने पर पुष्टि करने के लिए ज़रूरत के मुताबिक फ़्लो उपलब्ध कराना शामिल है. इसके अलावा, गाड़ी के पार्क होने पर खास अनुभव देना भी शामिल है. जैसे, वीडियो पॉडकास्ट या संगीत क्लिप स्ट्रीम करना.
यह सीधे तौर पर मीडिया प्लेबैक टेंप्लेट के साथ इंटिग्रेट होता है.
इसलिए, जब वाहन रुका हुआ होता है, तो ड्राइवर को आपके ऐप्लिकेशन की नेटिव Android गतिविधि का पूरा ऐक्सेस मिल जाता है. इससे वे वीडियो स्ट्रीमिंग जैसे रिच मीडिया का इस्तेमाल कर पाते हैं.
कार को गियर में डालते ही, ध्यान भटकने से बचाने वाली सुविधाएं चालू हो जाती हैं. इससे आपके ऐप्लिकेशन को कार के लिए ऐप्लिकेशन की लाइब्रेरी के मीडिया टेंप्लेट पर वापस जाने का प्रॉम्प्ट मिलता है, ताकि बिना किसी रुकावट के ऑडियो सुना जा सके.
हम कार में मिलने वाले अनुभवों को बेहतर बनाने के लिए लगातार काम कर रहे हैं.
मीडिया ऐप्लिकेशन, ब्राउज़ करने और मीडिया चलाने के पारंपरिक इंटरफ़ेस से आगे बढ़ना चाहते हैं. इससे वे ड्राइवर और यात्रियों को बेहतर, ज़्यादा इमर्सिव, और इंटरैक्टिव अनुभव दे पाएंगे.
अब हम एक उदाहरण की मदद से समझेंगे कि Media3 लाइब्रेरी का इस्तेमाल करके, नेटिव वीडियो ऐक्टिविटी कैसे जोड़ी जा सकती है. इससे कार के पार्क होने पर, वीडियो अपने-आप चलने लगेगा.
इसके लिए, आपको वीडियो रेंडरिंग प्लैटफ़ॉर्म को सीधे बैकग्राउंड प्लेबैक इंस्टेंस से कनेक्ट करना होगा.
override fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}आपको इस गतिविधि में, अलग से मीडिया प्लेयर को इंस्टैंशिएट करने से बचना चाहिए. इसके बजाय, आपको अपनी मुख्य सेवा में ExoPlayer या मीडिया प्लेयर को बनाए रखना चाहिए. जैसे, Media3 मीडिया लाइब्रेरी सेवा, जो ऑडियो और वीडियो, दोनों स्ट्रीम को एक साथ मैनेज करती है.
इसलिए, गाड़ी चलाते समय जब कोई सेवा चालू नहीं होती, तब प्लेयर सिर्फ़ ऑडियो को डिकोड करता है. हालांकि, जब ड्राइवर गाड़ी पार्क करने के बाद वीडियो ऐक्टिविटी खोलते हैं, तो आपको रेंडरिंग सरफ़ेस को सीधे तौर पर, पहले से मौजूद सर्विस प्लेयर से अटैच करना होता है.
Media3 का इस्तेमाल करके, mediaController प्लेयर को नेटिव तौर पर लागू करता है. इससे सीधे तौर पर असाइनमेंट की अनुमति मिलती है, जैसा कि यहां देखा जा सकता है, playerView सेट-- playerView.player को सीधे mediaController पर सेट किया जाता है.
इसके बाद, आपको ParkedOnlyOnClickListener का इस्तेमाल करके, नेटिव एंट्री पॉइंट को रजिस्टर करना होगा.
val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()यह रैपर, आपके मीडिया प्लेबैक इंटरफ़ेस के हेडर बार में इंटेंट ट्रिगर उपलब्ध कराता है.
इसलिए, वीडियो प्लेबैक लॉन्च करने के लिए कोई कार्रवाई शामिल करें. इसके लिए, इसके सिलेक्शन लिसनर को ParkedOnlyOnClickListener में रैप करें.
इसलिए, ड्राइविंग मोड में इन टैप को होस्ट ऐप्लिकेशन इंटरसेप्ट करता है. यह ऐप्लिकेशन, सिस्टम की सुरक्षा से जुड़ा मैसेज दिखाता है. इससे, ड्राइव करते समय उस स्क्रीन पर नहीं जाया जा सकता. हालांकि, गाड़ी पार्क करने पर, कॉलबैक carContext में startActivity को ट्रिगर करता है, ताकि फ़ुल-स्क्रीन वाली गतिविधि को लॉन्च किया जा सके.
याद रखें कि Car App Library की मदद से बनाए गए इन ऐप्लिकेशन में, आपको मेनिफ़ेस्ट में अपने वीडियो टारगेट को distractionOptimized=false के तौर पर फ़्लैग करना होगा. इससे ऑपरेटिंग सिस्टम को पता चलता है कि यह सिर्फ़ पार्क किए गए वाहन के लिए वर्कफ़्लो है.
<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>आखिर में, आइए देखते हैं कि जब ड्राइवर, वाहन को पार्क मोड से ड्राइव मोड में शिफ़्ट करता है, तब क्या होता है.
अगर गतिविधि को डिस्ट्रैक्शन-ऑप्टिमाइज़ नहीं किया गया है और कार के चलने के दौरान वह गतिविधि चालू रहती है, तो AAOS एक सिस्टम ब्लॉकिंग ओवरले दिखाता है. इससे आपको पता चलता है कि ऐप्लिकेशन का इस्तेमाल जारी रखने के लिए, कार को पार्क करना होगा.
इस ब्लॉक की गई स्क्रीन से बचने के लिए, हमारा लक्ष्य ऑडियो में रुकावट डाले बिना, मीडिया प्लेबैक टेंप्लेट पर आसानी से वापस जाना है.
इसलिए, जब यहां isRequiresDistractionOptimization की वैल्यू true होती है, तो हम आपके मौजूदा मीडिया सेशन से वीडियो रेंडरिंग सरफ़ेस को हटा देते हैं. साथ ही, प्लेयर ऐक्टिविटी पर फ़िनिश को कॉल करते हैं, क्योंकि इसे आपके सीएएल अनुभव के ऊपर लॉन्च किया गया था. इसे पूरा करने पर, सीधे आपके मीडिया प्लेबैक टेंप्लेट पर वापस जाया जाता है और ऑडियो प्लेबैक जारी रहता है.
class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}ऑडियो को बिना किसी रुकावट के चलाना, उपयोगकर्ता को बेहतर अनुभव देने के लिए ज़रूरी है. इसलिए, अपने मीडिया सेशन को फ़ोरग्राउंड सेवा के तौर पर चालू रखने से, इन स्थितियों में होने वाले बदलावों के दौरान भी ऑडियो बिना किसी रुकावट के चलता रहता है.
<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>SHOW_MEDIA_PLAYBACK इंटेंट कैप्चर करने के लिए, आपको सीएएल स्क्रीन में onNewIntent को भी बदलना चाहिए.
class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}इससे, जब भी उपयोगकर्ता कार की होम स्क्रीन पर मौजूद, वाहन के सिस्टम मीडिया विजेट से इंटरैक्ट करेंगे, तो डीप लिंक उन्हें सीधे कार ऐप्लिकेशन लाइब्रेरी में मौजूद, 'अभी चल रहा है' व्यू पर ले जाएगा.
इसलिए, डेवलपमेंट प्रोसेस के दौरान इन ट्रांज़िशन की पुष्टि करना बहुत आसान है.
AAOS पर adb कमांड चलाए जा सकते हैं.
इस मामले में, जब आपको फिर से गतिविधियों के बीच स्विच करना हो, तो emulate-driving-state drive या emulate-driving-state park का इस्तेमाल करें.
यहां एक उदाहरण दिया गया है. इसमें, कार के लिए ऐप्लिकेशन लाइब्रेरी का इस्तेमाल करके, Media3 मीडिया ऐप्लिकेशन के नए सैंपल का इस्तेमाल किया गया है. इसमें, पार्क-टू-ड्राइव वीडियो प्लेबैक की सुविधा है.
इसलिए, इसे नीचे मौजूद हमारे अडैप्टिव Android बूथ पर देखें. साथ ही, कार के सैंपल वाले हमारे GitHub पर भी इसे जल्द ही देखें.
पार्क-टू-ड्राइव की सुविधाएं, फ़िलहाल Android Automotive OS पर उन मीडिया ऐप्लिकेशन के लिए उपलब्ध हैं जिन्होंने ड्राइविंग के अनुभव के लिए, कार के सीएएल के साथ पहले से ही इंटिग्रेट किया हुआ है. अब वे कार पार्क होने के दौरान, बेहतर अनुभव दे सकते हैं.
developer.android.com पर मौजूद हमारे दस्तावेज़ में, इस बारे में जल्द ही जानकारी दी जाएगी. इस सुविधा को अपने ऐप्लिकेशन में शामिल करने के लिए, वहां अपनी दिलचस्पी दिखाएं.
पॉल.
बहुत बढ़िया.
धन्यवाद, थॉमस।
सेशन खत्म करने से पहले, मैं आपको कुछ ऐसे तरीके बताना चाहता हूं जिनसे आपको इस साल के आखिर में आने वाली सुविधाओं के बारे में ज़्यादा जानकारी मिल सकती है.
जैसा कि थॉमस ने बताया, CAL 1.9 फ़िलहाल ऐल्फ़ा वर्शन में है.
यह जल्द ही बीटा वर्शन में उपलब्ध होगा.
इसके बाद, साल के आखिर से पहले CAL 1.10 को ऐल्फ़ा वर्शन में लॉन्च किया जाएगा. इससे आपको बातचीत वाले यूज़र इंटरफ़ेस (यूआई), कम्यूनिकेशन की नई सुविधाओं, और पार्क-टू-ड्राइव की सुविधाओं का आकलन करने का मौका मिलेगा.
आखिर में, हमें यह बताते हुए खुशी हो रही है कि Android Auto और Android Automotive OS में गेम उपलब्ध हैं. इसलिए, कार के लिए अपने गेम को ऑप्टिमाइज़ करने का यह सबसे सही समय है.
इसे लागू करने के बारे में ज़्यादा जानने के लिए, "कार के लिए गेम बनाएं" गाइड में मौजूद दस्तावेज़ ज़रूर देखें.
कार के लिए Android के बारे में ज़्यादा जानने के लिए, "नया क्या है" पेज पर जाएं. यहां आपको कार के लिए गेम बनाने और Android for Cars में होने वाले बदलावों के बारे में जानकारी मिलेगी.
हमें उम्मीद है कि आपको यह समझ आ गया होगा कि कारें और उनके उपयोगकर्ता, आपके ऐप्लिकेशन के लिए तैयार हैं.
गाड़ी पार्क होने पर इस्तेमाल किए जाने वाले ऐप्लिकेशन के बेहतर अनुभव देने के लिए, मौजूदा अडैप्टिव ऐप्लिकेशन का इस्तेमाल किया जा सकता है. साथ ही, कार के लिए ऐप्लिकेशन लाइब्रेरी के अलग-अलग टेंप्लेट का इस्तेमाल करके, सुरक्षित ड्राइविंग के लिए ऑप्टिमाइज़ किए गए अनुभव बनाए जा सकते हैं.
ऐप्लिकेशन को पब्लिश करने से पहले, उसकी अच्छी तरह से जांच की जा सकती है. इसके लिए, डेस्कटॉप हेड यूनिट, एम्युलेटर, Pixel Tablet पर चलने वाले AAOS या Firebase टेस्ट लैब का इस्तेमाल किया जा सकता है.
आपके पास इस नेटवर्क के लिए ऐप्लिकेशन बनाने की ज़रूरी स्किल पहले से मौजूद हैं. साथ ही, लाखों कारें आपके ऐप्लिकेशन का इंतज़ार कर रही हैं. इसलिए, चलिए आपके ऐप्लिकेशन को कार में इस्तेमाल के लिए उपलब्ध कराते हैं.
android skills list
android skills add android-for-cars-parked-appsoverride fun onStart() {
super.onStart()
...
controllerFuture = MediaController.Builder(
this,
sessionToken
).buildAsync()
controllerFuture?.addListener({
mediaController = controllerFuture?.get()
playerView.player = mediaController
}, ContextCompat.getMainExecutor(this))
}val watchVideoAction = Action.Builder()
.setTitle("Watch Video")
.setIcon(videoCarIcon)
.setOnClickListener(
ParkedOnlyOnClickListener.create {
val intent = Intent(
carContext,
VideoPlayerActivity::class.java
)
.apply {
addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
)
}
carContext.startActivity(intent)
})
.build()<activity
android:name=".VideoPlayerActivity"
android:exported="false"
android:launchMode="singleTop">
<meta-data
android:name="distractionOptimized"
android:value="false" />
</activity>class VideoPlayerActivity : ComponentActivity(){
override fun onStart() {
…
if (uxRestrictionsManager?
.currentCarUxRestrictions?
.isRequiresDistractionOptimization
== true) {
revertToCarAppTemplate()
}
}
private fun revertToCarAppTemplate() {
mediaControllerCompat
.sendCommand("CMD_CLEAR_VIDEO_SURFACE",
null, null)
finish()
}
}<activity
android:name="androidx.car.app.activity.CarAppActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
</intent-filter>
<meta-data
android:name="distractionOptimized"
android:value="true" />
</activity>class MyCarAppSession : Session() {
override fun onCreateScreen(intent: Intent): Screen {
// 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
// 2. Handle deep link if cold-started from the vehicle's media widget
handlePlaybackIntent(intent)
return HomeScreen(carContext)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// 3. Handle deep link when the session is already running
handlePlaybackIntent(intent)
}
}