Car App Library के टेंप्लेट का इस्तेमाल करने वाले मीडिया ऐप्लिकेशन, मीडिया ब्राउज़ करने और चलाने के अनुभव को अपनी पसंद के मुताबिक बना सकते हैं. साथ ही, यह पक्का कर सकते हैं कि अनुभव को कार की स्क्रीन के लिए ऑप्टिमाइज़ किया गया हो और ड्राइविंग के दौरान ध्यान भटकने की संभावना कम हो.
इस गाइड में यह मानकर चला गया है कि आपके पास पहले से ही कोई ऐसा मीडिया ऐप्लिकेशन है जो फ़ोन पर ऑडियो चलाता है. साथ ही, आपका मीडिया ऐप्लिकेशन Android मीडिया ऐप्लिकेशन के आर्किटेक्चर के मुताबिक है. Car App Library की मदद से, ऐप्लिकेशन में मिलने वाले अनुभव को कार के लिए मीडिया ऐप्लिकेशन बनाएं
MediaBrowser डेटा स्ट्रक्चर का इस्तेमाल करके बनाए गए टेंप्लेट के बजाय, टेंप्लेट से बदला जा सकता है. आपको अब भी प्लेबैक कंट्रोल के लिए MediaSession और MediaBrowserService देना होगा. MediaBrowserService का इस्तेमाल, सुझाव देने और अन्य स्मार्ट सुविधाओं के लिए किया जाता है.
अपने ऐप्लिकेशन के मेनिफ़ेस्ट को कॉन्फ़िगर करना
Android for Cars ऐप्लिकेशन लाइब्रेरी का इस्तेमाल करना में बताए गए चरणों के अलावा, टेंप्लेट वाले मीडिया ऐप्लिकेशन के लिए ये ज़रूरी शर्तें पूरी करना भी ज़रूरी है:
मेनिफ़ेस्ट फ़ाइल में, कैटगरी के साथ काम करने की सुविधा के बारे में जानकारी देना
आपके ऐप्लिकेशन को, 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>
इसके बाद, अपनी xml फ़ाइल में मौजूद automotive_app_desc.xml में टेंप्लेट का एलान जोड़ें. यह इस तरह दिखना चाहिए:
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
<uses name="media"/>
<uses name="template"/>
</automotiveApp>
एट्रिब्यूशन आइकॉन उपलब्ध कराना
CarApp लाइब्रेरी का इस्तेमाल करके बनाए गए मीडिया ऐप्लिकेशन के लिए, एट्रिब्यूशन आइकॉन जोड़ना न भूलें.
बोलकर फ़ोन का इस्तेमाल करने की सुविधा
अपने ऐप्लिकेशन में बोलकर कंट्रोल करने की सुविधा चालू करें, ताकि उपयोगकर्ता सामान्य कार्रवाइयां बोलकर कर सकें.
लागू करने के बारे में ज़्यादा जानकारी के लिए, मीडिया के लिए बोलकर की जाने वाली कार्रवाइयों की सुविधा देखें. अगर आपको टेंप्लेट वाले मीडिया ऐप्लिकेशन में कोई वॉइस कमांड मिलती है, तो आपको खोज के नतीजों के साथ MediaBrowserService को अपडेट करने की ज़रूरत नहीं है. इसके बजाय, मीडिया चलाने के टेंप्लेट में कोई कार्रवाई जोड़ें, ताकि उपयोगकर्ता को उस खोज क्वेरी या चलाए गए कॉन्टेंट के आधार पर ज़्यादा कॉन्टेंट मिल सके. VC-1 क्वालिटी के दिशा-निर्देश का पालन करने के लिए, बोले गए निर्देशों को समझने की सुविधा देना ज़रूरी है.
अपना प्लेबैक टेंप्लेट बनाना
MediaPlaybackTemplate, Car App Library के मीडिया ऐप्लिकेशन में मीडिया प्लेबैक की जानकारी दिखाता है. इस टेंप्लेट की मदद से, टाइटल और पसंद के मुताबिक कार्रवाइयों वाला हेडर सेट किया जा सकता है. वहीं, मीडिया की जानकारी और प्लेबैक कंट्रोल, होस्ट के ज़रिए भरे जाते हैं. ये जानकारी और कंट्रोल, आपके ऐप्लिकेशन के MediaSession की स्थिति के आधार पर तय होते हैं.
पहली इमेज:
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)
}
...
}
)
}
}
}
.registerMediaPlaybackToken, Android Auto को मीडिया प्लेबैक की जानकारी और कंट्रोल दिखाने के लिए ज़रूरी है. होस्ट के लिए भी यह ज़रूरी है, ताकि वह मीडिया के हिसाब से सूचनाएं बना सके.
टेंप्लेट का इस्तेमाल करके मीडिया व्यवस्थित करना
गाने या एल्बम जैसे मीडिया को ब्राउज़ करने के लिए व्यवस्थित करने के लिए, हमारा सुझाव है कि आप 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 का इस्तेमाल किया जा रहा है, तो फ़्लोटिंग ऐक्शन बटन जोड़कर ऐसा किया जा सकता है. यह बटन आपको मीडिया चलाने वाली स्क्रीन पर नेविगेट करता है. अन्य टेंप्लेट के लिए, हेडर ऐक्शन का इस्तेमाल करके भी ऐसा किया जा सकता है.