टेंप्लेट वाला मीडिया ऐप्लिकेशन बनाना

टेंप्लेट वाले मीडिया ऐप्लिकेशन, बीटा वर्शन में हैं
फ़िलहाल, कोई भी व्यक्ति Play Store पर इंटरनल टेस्टिंग और क्लोज़्ड टेस्टिंग ट्रैक में, टेंप्लेट वाले मीडिया ऐप्लिकेशन पब्लिश कर सकता है. ओपन ट्रैक और प्रोडक्शन ट्रैक पर पब्लिश करने की अनुमति बाद में दी जाएगी.

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

इस गाइड में यह माना गया है कि आपके पास पहले से ही ऐसा मीडिया ऐप्लिकेशन है जो फ़ोन पर ऑडियो चलाता है और आपका मीडिया ऐप्लिकेशन, Android मीडिया ऐप्लिकेशन के आर्किटेक्चर के मुताबिक है. कार ऐप्लिकेशन लाइब्रेरी की मदद से, कार के लिए मीडिया ऐप्लिकेशन बनाएं MediaBrowser डेटा स्ट्रक्चर का इस्तेमाल करके बनाए गए टेंप्लेट के बजाय, इन-ऐप्लिकेशन अनुभव को टेंप्लेट से बदला जा सकता है. आपको अब भी प्लेबैक कंट्रोल के लिए MediaSession और सुझावों और अन्य स्मार्ट अनुभवों के लिए MediaBrowserService देना होगा.

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

'कार के लिए Android ऐप्लिकेशन' की लाइब्रेरी का इस्तेमाल करना में बताए गए चरणों के अलावा, टेंप्लेट वाले मीडिया ऐप्लिकेशन के लिए ये ज़रूरी हैं:

अपने मेनिफ़ेस्ट में, कैटगरी के साथ काम करने की जानकारी देना

आपके ऐप्लिकेशन को CarAppService के इंटेंट फ़िल्टर में, androidx.car.app.category.MEDIA कार ऐप्लिकेशन कैटगरी का एलान करना होगा.

<application>
    ...
   <service
       ...
        android:name=".MyCarAppService"
        android:exported="true">
      <intent-filter>
        <action android:name="androidx.car.app.CarAppService" />
        <category android:name="androidx.car.app.category.MEDIA"/>
      </intent-filter>
    </service>
    ...
<application>

MediaPlaybackTemplate को ऐक्सेस करने के लिए, आपके ऐप्लिकेशन को अपनी मेनिफ़ेस्ट फ़ाइल में androidx.car.app.MEDIA_TEMPLATES की अनुमति का एलान भी करना होगा:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.MEDIA_TEMPLATES"/>
  ...
</manifest>

कार ऐप्लिकेशन के लिए कम से कम एपीआई लेवल सेट करना

MediaPlaybackTemplate का इस्तेमाल करने वाले मीडिया ऐप्लिकेशन, सिर्फ़ CAL API 8 के साथ काम करते हैं. इसलिए, पक्का करें कि आपने कम से कम Car App API level को 8 पर सेट किया हो.

<application ...>
  ...
  <meta-data
    android:name="androidx.car.app.minCarApiLevel"
    android:value="8"/>
  ...
</application>

Android Auto के साथ काम करने की जानकारी देना

पक्का करें कि आपके ऐप्लिकेशन के मेनिफ़ेस्ट में ये चीज़ें शामिल हों:

<application>
  ...
  <meta-data android:name="com.google.android.gms.car.application"
      android:resource="@xml/automotive_app_desc"/>
  ...
</application>

इसके बाद, अपने एक्सएमएल संसाधनों में automotive_app_desc.xml में टेंप्लेट एलान जोड़ें. यह इस तरह दिखना चाहिए:

<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
 <uses name="media"/>
 <uses name="template"/>
</automotiveApp>

एट्रिब्यूशन आइकॉन दें

Car App Library का इस्तेमाल करके बनाए गए मीडिया ऐप्लिकेशन के लिए, एट्रिब्यूशन आइकॉन ज़रूर जोड़ें.

बोलकर फ़ोन इस्तेमाल करने की सुविधा

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

प्लेबैक टेंप्लेट बनाना

MediaPlaybackTemplate, आपकी कार ऐप्लिकेशन लाइब्रेरी के मीडिया ऐप्लिकेशन में मीडिया प्लेबैक की जानकारी दिखाता है. इस टेंप्लेट की मदद से, शीर्षक और पसंद के मुताबिक बनाई जा सकने वाली कार्रवाइयों के साथ हेडर सेट किया जा सकता है. वहीं, मीडिया की जानकारी और प्लेबैक कंट्रोल, होस्ट आपके ऐप्लिकेशन के MediaSession की स्थिति के आधार पर भरता है.

संगीत प्लेयर में, समर फ़ील्डिंग का Sounds of Spring दिख रहा है. साथ ही, स्क्वेयर पोर्ट्रेट में एक महिला को गिटार बजाते हुए दिखाया गया है.

पहली इमेज: सबसे ऊपर मौजूद सूची खोलने के लिए, MediaPlaybackTemplate हेडर ऐक्शन के साथ.

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

val playbackTemplate = MediaPlaybackTemplate.Builder()
      .setHeader(
        Header.Builder()
          .setStartHeaderAction(Action.BACK)
          .addEndHeaderAction(
                Action.Builder()
                  .setTitle(model.context.getString(R.string.queue_button_title))
                  .setIcon(
                    CarIcon.Builder(
                        IconCompat.createWithResource(
                          model.context,
                          R.drawable.gs_queue_music_vd_theme_24,
                        ))
                      .build())
                  .setOnClickListener(showQueueScreen())
                  .build())
          .setTitle(model.context.getString(R.string.media_playback_view_title))
          .build())
      .build()

MediaPlaybackTemplate का इस्तेमाल करते समय, अपने CarAppService में MediaPlaybackManager का इस्तेमाल करके MediaSession टोकन रजिस्टर करें. ऐसा न करने पर, होस्ट को MediaPlaybackTemplate भेजने पर गड़बड़ी का मैसेज दिखता है.

import androidx.car.app.media.MediaPlaybackManager


override fun onCreateSession(sessionInfo: SessionInfo): Session {
    return object : Session() {
        

        init {
          lifecycle.addObserver(
            LifecycleEventObserver { _, event ->
              if (event == ON_CREATE) {
                val token = ... // MediaSessionCompat.Token
                (carContext.getCarService(CarContext.MEDIA_PLAYBACK_SERVICE) as MediaPlaybackManager)
                  .registerMediaPlaybackToken(token)
              }
              ...
            }
          )
        }
    }
}

Android Auto को मीडिया प्लेबैक की जानकारी और कंट्रोल दिखाने के लिए, .registerMediaPlaybackToken ज़रूरी है. यह जानकारी होस्ट के लिए भी ज़रूरी है, ताकि वह मीडिया के हिसाब से सूचनाएं बना सके.

टेंप्लेट का इस्तेमाल करके मीडिया व्यवस्थित करना

हमारा सुझाव है कि ब्राउज़ करने के लिए, मीडिया को व्यवस्थित करने के लिए SectionedItemTemplate का इस्तेमाल करें. इससे, GridSection और RowSection का इस्तेमाल करके, इमेज और टेक्स्ट आइटम की सूचियों को मिलाने वाले लेआउट बनाए जा सकते हैं.

संगीत ऐप्लिकेशन के इंटरफ़ेस में, हाल ही में सुने गए गाने और एल्बम दिख रहे हैं. इसमें दो वर्टिकल लाइन और तीन हॉरिज़ॉन्टल एल्बम आर्ट पोर्ट्रेट शामिल हैं.

दूसरी इमेज: SectionedItemTemplate में RowSection के बाद GridSection

TabTemplate में SectionedItemTemplate का इस्तेमाल करना

अपने ऐप्लिकेशन में मीडिया को कैटगरी में बांटने का एक आसान तरीका यह है कि आप TabTemplate में SectionedItemTemplate का इस्तेमाल करें.

val template =
      SectionedItemTemplate.Builder()...build();
val tabTemplate = 
      TabTemplate.Builder(tabCallback)
          .setTabContents(TabContents.Builder(template).build)
          .setHeaderAction(Action.APP_ICON)
          
          .build();

इन टेंप्लेट का इस्तेमाल करके, अपने मीडिया ऐप्लिकेशन के यूज़र इंटरफ़ेस को डिज़ाइन करने के तरीके के बारे में ज़्यादा जानने के लिए, मीडिया ऐप्लिकेशन लेख पढ़ें.

मीडिया ब्राउज़ करते समय, यह ज़रूरी है कि उपयोगकर्ता कम से कम ध्यान भटकाने के साथ, MediaPlaybackTemplate पर तुरंत नेविगेट कर सके. MFT-1 क्वालिटी से जुड़ी ज़रूरी शर्त को पूरा करने के लिए, आपके ऐप्लिकेशन में सभी मीडिया ब्राउज़िंग स्क्रीन से MediaPlaybackTemplate को ऐक्सेस करने का तरीका होना चाहिए.

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