सिस्टम कॉम्पोनेंट और उपयोगकर्ता फ़्लो

मीडिया से इंटरैक्ट करने वाले कॉम्पोनेंट के बारे में इस टेबल में बताया गया है:

कॉम्पोनेंट ब्यौरा
होम स्क्रीन यह कार के यूज़र इंटरफ़ेस (यूआई) में मौजूद अन्य प्लैटफ़ॉर्म को दिखाता है. इन प्लैटफ़ॉर्म पर, फ़िलहाल चल रहे मीडिया को दिखाया और कंट्रोल किया जाता है. AOSP में, सिस्टम शुरू होने पर यह मुख्य स्क्रीन दिखती है. इस स्क्रीन पर, उपयोगकर्ता मीडिया आइटम की जानकारी देख सकते हैं. साथ ही, स्टैंडर्ड और कस्टम कार्रवाइयों का सीमित सेट पूरा कर सकते हैं. उदाहरण के लिए, चलाएं और रोकें.
सिस्टम यूज़र इंटरफ़ेस (यूआई) यह ऐसी सुविधाएँ उपलब्ध कराता है जिनमें ग्लोबल यूज़र इंटरफ़ेस (यूआई) नेविगेशन के विकल्प शामिल हैं. जैसे, मीडिया पर नेविगेट करना.
Assistant Android, अलग-अलग वॉइस असिस्टेंट ऐप्लिकेशन को सिस्टम के साथ इंटरैक्ट करने के लिए तरीके उपलब्ध कराता है. ये ऐप्लिकेशन, बैकग्राउंड में मीडिया सोर्स के साथ इंटरैक्ट कर सकते हैं. उदाहरण के लिए, बोलकर दिए गए निर्देश के जवाब में कोई गाना चलाना. इसके अलावा, ये ऐप्लिकेशन फ़ोरग्राउंड में मीडिया पर नेविगेट कर सकते हैं. उदाहरण के लिए, जब किसी वॉइस असिस्टेंट ऐप्लिकेशन को किसी मीडिया सोर्स का यूज़र इंटरफ़ेस (यूआई) दिखाने का निर्देश दिया जाता है.
ऐप्लिकेशन लॉन्चर सभी Android ऐप्लिकेशन, ऐप्लिकेशन लॉन्चर में शुरू होते हैं. इनमें मीडिया सोर्स भी शामिल हैं. मीडिया, अपना मीडिया सोर्स सिलेक्टर दिखा सकता है. यह मीडिया के लिए, ऐप्लिकेशन लॉन्चर की जगह काम कर सकता है या इसके साथ काम कर सकता है.
Google Play Store GAS का इस्तेमाल करते समय, उपयोगकर्ता Android डिवाइस में नए ऐप्लिकेशन यहां ढूंढते और इंस्टॉल करते हैं. मीडिया ऐप्लिकेशन इंस्टॉल करने के बाद, उपयोगकर्ताओं को मीडिया पर रीडायरेक्ट किया जाता है. इससे वे साइन-इन की प्रोसेस पूरी कर पाते हैं या ऐप्लिकेशन का इस्तेमाल शुरू कर पाते हैं.
Media Session Manager यह Android सिस्टम सर्विस है. यह सभी मीडिया सोर्स से मीडिया सेशन को ट्रैक और कंट्रोल करती है. यह ऐसे तरीके उपलब्ध कराता है जिनसे यह पता लगाया जा सकता है कि कोई मीडिया सोर्स, फ़ोरग्राउंड मीडिया सोर्स कब बनता है. मीडिया और मौजूदा समय में चल रहे मीडिया सोर्स को दिखाने वाले सभी अन्य ऐप्लिकेशन (उदाहरण के लिए, होम स्क्रीन), इन इवेंट का पता लगाने के लिए मीडिया सेशन मैनेजर का इस्तेमाल करते हैं. साथ ही, इसके हिसाब से यूज़र इंटरफ़ेस (यूआई) को अपडेट करते हैं. मीडिया सोर्स, Media Session API की मदद से Media Session Manager के साथ इंटरैक्ट करते हैं.
रेडियो रेडियो हार्डवेयर के साथ इंटरैक्ट करने के लिए खास ऐप्लिकेशन. रेडियो स्टेशन खोजने, हाल ही में पहचाने गए स्टेशनों को तुरंत चुनने, और रेडियो बैंड के बीच स्विच करने के लिए रेडियो. रेडियो और मीडिया, दोनों के लिए शेयर किए गए यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट की मदद से, उपयोगकर्ता इन दोनों के बीच स्विच कर सकता है.
ड्राइवर का ध्यान भटकाने वाले कॉन्टेंट का पता लगाने वाला इंजन यह Android सिस्टम सेवा है. इसका इस्तेमाल, कार की ड्राइविंग की स्थिति के आधार पर उपयोगकर्ता अनुभव से जुड़ी पाबंदियां लागू करने के लिए किया जाता है. मीडिया सोर्स में साइन इन करने और सेटिंग के यूज़र एक्सपीरियंस (जहां स्क्रीन को सीधे तौर पर मीडिया सोर्स कंट्रोल करते हैं) के लिए, यह सेवा यह पक्का करती है कि गाड़ी चलाते समय कोई भी आपत्तिजनक कॉन्टेंट न दिखे. ओईएम, इन स्थितियों की परिभाषा और इन स्थितियों में सिस्टम के काम करने के तरीके को अपनी पसंद के मुताबिक बना सकते हैं. उदाहरण के लिए, ब्लॉक करने वाली स्क्रीन ओवरले को दिखाकर.

यूज़र फ़्लो

मीडिया ऐप्लिकेशन लॉन्च करना

मीडिया को लॉन्च करने के लिए, यहां दिया गया इंप्लिसिट CAR_INTENT_ACTION_MEDIA_TEMPLATE इस्तेमाल किया जाना चाहिए. इस इंटेंट में अतिरिक्त जानकारी के तौर पर यह जानकारी शामिल हो सकती है:

  • android.car.intent.extra.MEDIA_COMPONENT (ज़रूरी नहीं). स्ट्रिंग एक्स्ट्रा का इस्तेमाल, मीडिया ऐप्लिकेशन में MediaBrowserService के फ़्लैट किए गए कॉम्पोनेंट के नाम को दिखाने के लिए किया जाता है. मीडिया को इस ऐप्लिकेशन से कनेक्ट करना होता है. अगर यह जानकारी नहीं दी जाती है, तो मीडिया डिसप्ले पर, फ़िलहाल चुना गया मीडिया ऐप्लिकेशन दिखता है. इस इंटेंट का इस्तेमाल इन एंट्री पॉइंट से किया जाता है:

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

    • होम स्क्रीन, Assistant, और सूचना केंद्र. उपयोगकर्ता, मीडिया पर जाकर मौजूदा समय में चुने गए मीडिया ऐप्लिकेशन को दिखा सकते हैं. सभी मामलों में, बिना किसी अतिरिक्त जानकारी के इंप्लिसिट इंटेंट ट्रिगर होता है.

    • ऐप्लिकेशन लॉन्चर. जब उपयोगकर्ता ऐप्लिकेशन लॉन्चर से कोई मीडिया ऐप्लिकेशन चुनते हैं, तो ऊपर दिए गए इंटेंट में CAR_EXTRA_MEDIA_COMPONENT एक्स्ट्रा शामिल होता है. इसमें चुना गया मीडिया ऐप्लिकेशन होता है. मीडिया इसे नए ऐप्लिकेशन के तौर पर दिखाता है और इससे कनेक्ट हो जाता है. ज़्यादा जानकारी के लिए, नीचे दिया गया सेक्शन देखें: मीडिया इंटिग्रेशन के लिए ऐप्लिकेशन लॉन्चर.

ऐप्लिकेशन लॉन्चर से मीडिया इंटिग्रेशन

मीडिया ऐप्लिकेशन को android.intent.category.LAUNCHER कैटगरी के साथ एनोटेट की गई कोई भी गतिविधि उपलब्ध कराने की अनुमति नहीं है. इसलिए, ऐप्लिकेशन लॉन्चर (या इसके जैसा कोई अन्य टूल) को मीडिया सोर्स इंटिग्रेशन की समस्या हल करने के लिए, खास लॉजिक लागू करना होगा:

  • ऐप्लिकेशन लॉन्चर को, MediaBrowserService.SERVICE_INTERFACE लागू करने वाले पैकेज के लिए सिस्टम को स्कैन करना होगा. इन पैकेज के लिए, ऐप्लिकेशन लॉन्चर सेवा के आइकॉन को उसी तरह से फ़ेच करता है जिस तरह से अन्य गतिविधियों को फ़ेच किया जाता है.

  • इसके बाद, ऐप्लिकेशन लॉन्चर इन पैकेज को उन पैकेज के साथ जोड़ता है जिनमें android.intent.category.LAUNCHER गतिविधियां लागू की जाती हैं. अगर कोई ऐप्लिकेशन, MediaBrowserService लागू करने की सुविधा और लॉन्चर गतिविधि देता है, तो सेवा को प्राथमिकता दी जाती है.

    यह लेख लिखते समय, कोई भी मीडिया सोर्स ऐप्लिकेशन लॉन्चर गतिविधि की सुविधा नहीं दे सकता.

  • इस लॉजिक का एक उदाहरण, AOSP कोड में AppLauncherUtils#getAllLauncherApps() पर देखा जा सकता है.

साइन-इन करने की प्रोसेस और कॉन्फ़िगरेशन के विकल्प

मीडिया ऐप्लिकेशन में, वाहन के लिए ऑप्टिमाइज़ की गई सेटिंग गतिविधि शामिल हो सकती है. इस तरह की गतिविधि का इस्तेमाल, Android Media API से नहीं जुड़े उपयोगकर्ता फ़्लो को लागू करने के लिए किया जा सकता है. उदाहरण के लिए:

  • साइन-इन करें
  • साइन आउट करना
  • खाता बदलना
  • वह डिसप्ले जिसमें उपयोगकर्ता फ़िलहाल लॉग इन है (अगर कोई हो)
  • सेवा का कॉन्फ़िगरेशन

सेटिंग से जुड़ी इस गतिविधि का एलान, मीडिया ऐप्लिकेशन ने इस इंटेंट फ़िल्टर के साथ किया है:

<activity android:name=".AppSettingsActivity"
          android:exported="true
          android:theme="@style/SettingsActivity"
           android:label="@string/app_settings_activity_title">
   <intent-filter>
       <action android:name="android.intent.action.APPLICATION_PREFERENCES"/>
   </intent-filter>
</activity>

मीडिया को इस लॉजिक को लागू करना होगा:

  • देखें कि फ़िलहाल चुने गए मीडिया ऐप्लिकेशन में, दिए गए इंटेंट फ़िल्टर के साथ कोई गतिविधि शामिल हो.

  • अगर ऐसा है, तो उपयोगकर्ता को गतिविधि पर जाने की अनुमति दें.

  • अगर कार यूज़र एक्सपीरियंस (यूएक्स) से जुड़ी पाबंदियां लागू हैं (उदाहरण के लिए, कार चल रही है), तो इस सुविधा को बंद कर दिया जाना चाहिए. ऐसा इसलिए, क्योंकि सेटिंग ऐक्टिविटी, ड्राइवर के लिए ऑप्टिमाइज़ किया गया यूज़र इंटरफ़ेस (यूआई) नहीं है.

गड़बड़ी ठीक करना और साइन इन करना ज़रूरी है

मीडिया, Android Media Session API के ज़रिए मीडिया ऐप्लिकेशन के साथ इंटरैक्ट करता है. इस एपीआई के तहत, मीडिया को PlaybackState ऑब्जेक्ट मिलता है. इससे मीडिया ऐप्लिकेशन की मौजूदा स्थिति के बारे में पता चलता है.

साइन-इन की प्रोसेस तब शुरू होती है, जब मीडिया ऐप्लिकेशन PlaybackState को STATE_ERROR में बदलता है. इसमें गड़बड़ी का कोई खास कोड भी शामिल होता है. इसके बारे में यहां बताया गया है. ऐसा होने पर, Media गड़बड़ी की जानकारी दिखाता है. साथ ही, मीडिया ऐप्लिकेशन में साइन-इन करने की सुविधा पर जाने का विकल्प दिखाता है.

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

PlaybackState गड़बड़ी ठीक करने की सामान्य प्रक्रिया के तहत, मीडिया को इनपुट की जांच करनी होगी.

  • PlaybackState गड़बड़ी कोड PlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIRED के बराबर है. इस सिग्नल से पता चलता है कि मीडिया ऐप्लिकेशन को काम करना जारी रखने के लिए, साइन इन करना ज़रूरी है. आपको अन्य गड़बड़ी कोड भी मिल सकते हैं. इनसे गड़बड़ी की अन्य स्थितियों के बारे में पता चलेगा.

  • PlaybackState गड़बड़ी के मैसेज (मीडिया ऐप्लिकेशन, PlaybackStateCompat.Builder#setErrorMessage तरीके का इस्तेमाल करके इस मैसेज को सेट करते हैं) में ऐसी जानकारी होती है जिसे आसानी से समझा जा सकता है. उदाहरण के लिए, "आपने साइन इन नहीं किया है." यह मैसेज, उपयोगकर्ता को दिखना चाहिए. साथ ही, यह ड्राइविंग के दौरान ध्यान भटकाने वाले विज्ञापनों (डीओ) के लिए ऑप्टिमाइज़ किया गया होना चाहिए.

  • इसके अलावा, PlaybackState में यहां दी गई कुंजियों के साथ, ये अतिरिक्त चीज़ें शामिल की जा सकती हैं. इन्हें मीडिया ऐप्लिकेशन, PlaybackStateCompat.Builder#setExtras तरीके से सेट करते हैं.

    • android.media.extras.ERROR_RESOLUTION_ACTION_LABEL. इसे ऐसी स्ट्रिंग पर सेट किया जाता है जिसमें साइन इन करने की प्रोसेस शुरू करने के लिए, उपयोगकर्ता को बटन पर दिखने वाला मैसेज आसानी से समझ में आ सके.

    • android.media.extras.ERROR_RESOLUTION_ACTION_INTENT. इसे PendingIntent के साथ सेट किया जाता है, ताकि जब उपयोगकर्ता ऊपर दिए गए बटन पर क्लिक करे, तब यह ट्रिगर हो जाए. यह PendingIntent उसी मीडिया ऐप्लिकेशन की ओर इशारा करता है जिसने कस्टम साइन-इन की सुविधा लागू की है.

  • PlaybackState की स्थिति, STATE_ERROR के बराबर है. इससे पता चलता है कि साइन इन की प्रोसेस पूरी होने तक कोई और कार्रवाई नहीं की जा सकती.