[कॉन्टेंट का क्रम तय करने][1] के लिए, ब्राउज़ किए जा सकने वाले या चलाए जा सकने वाले आइटम का इस्तेमाल करें. इसके बाद, कॉन्टेंट के स्टाइल लागू करें. इससे यह तय किया जा सकेगा कि कार में वे आइटम कैसे दिखेंगे. कॉन्टेंट की इन स्टाइल का इस्तेमाल करें:
पहली इमेज. सूची में शामिल आइटम के लिए, इमेज के बजाय टाइटल और मेटाडेटा को प्राथमिकता दी जाती है.
दूसरी इमेज. ग्रिड आइटम में, टाइटल और मेटाडेटा के मुकाबले इमेज को प्राथमिकता दी जाती है.
कॉन्टेंट के डिफ़ॉल्ट स्टाइल सेट करना
मीडिया आइटम के दिखने के तरीके के लिए, ग्लोबल डिफ़ॉल्ट सेट किए जा सकते हैं. इसके लिए, अपनी सेवा के BrowserRoot extras बंडल में कुछ खास कॉन्स्टेंट शामिल करें. साथ ही, सही स्टाइल तय करने के लिए इन कॉन्स्टेंट को ढूंढें.onGetRoot
इन एक्स्ट्रा का इस्तेमाल बंडल में कुंजियों के तौर पर किया जा सकता है:
[
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE][2]: ब्राउज़ ट्री में मौजूद सभी ब्राउज़ किए जा सकने वाले आइटम के लिए, प्रज़ेंटेशन का सुझाव.[
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE][3]: ब्राउज़ ट्री में मौजूद सभी चलाए जा सकने वाले आइटम के लिए, प्रज़ेंटेशन का सुझाव.
इन कुंजियों को इन पूर्णांक स्थिरांक वैल्यू पर मैप किया जा सकता है, ताकि उन आइटम की प्रज़ेंटेशन पर असर डाला जा सके:
[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM][4]: मिलते-जुलते आइटम सूची में दिए गए आइटम के तौर पर दिखाए जाते हैं.[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM][5]: मिलते-जुलते आइटम ग्रिड आइटम के तौर पर दिखाए गए हैं.[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM][6]: मिलते-जुलते आइटम, "category" सूची के आइटम के तौर पर दिखाए जाते हैं. ये सामान्य सूची के आइटम की तरह ही होते हैं, लेकिन आइटम के आइकॉन के चारों ओर मार्जिन लागू होते हैं. इससे छोटे आइकॉन बेहतर दिखते हैं. आइकॉन, रंग बदलने की सुविधा वाले वेक्टर ड्रॉएबल होने चाहिए. इस सुराग को सिर्फ़ ब्राउज़ किए जा सकने वाले आइटम के लिए उपलब्ध कराएं.[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM][7]: मिलते-जुलते आइटम, "कैटगरी" ग्रिड आइटम के तौर पर दिखाए जाते हैं. ये सामान्य ग्रिड आइटम की तरह ही होते हैं. हालांकि, आइटम के आइकॉन के चारों ओर मार्जिन लागू होते हैं. इससे छोटे आइकॉन बेहतर दिखते हैं. आइकॉन, टिंट किए जा सकने वाले वेक्टर ड्रॉएबल होने चाहिए. इस सुराग को सिर्फ़ ब्राउज़ किए जा सकने वाले आइटम के लिए उपलब्ध कराएं.
इस कोड स्निपेट में, ब्राउज़ किए जा सकने वाले आइटम के लिए डिफ़ॉल्ट कॉन्टेंट स्टाइल को ग्रिड और चलाए जा सकने वाले आइटम के लिए सूची के तौर पर सेट करने का तरीका बताया गया है:
Kotlin
import androidx.media.utils.MediaConstants
@Nullable
override fun onGetRoot(
@NonNull clientPackageName: String,
clientUid: Int,
@Nullable rootHints: Bundle
): BrowserRoot {
val extras = Bundle()
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM)
return BrowserRoot(ROOT_ID, extras)
}
Java
import androidx.media.utils.MediaConstants;
@Nullable
@Override
public BrowserRoot onGetRoot(
@NonNull String clientPackageName,
int clientUid,
@Nullable Bundle rootHints) {
Bundle extras = new Bundle();
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM);
return new BrowserRoot(ROOT_ID, extras);
}
हर आइटम के लिए कॉन्टेंट स्टाइल सेट करना
ब्राउज़ किए जा सकने वाले किसी भी मीडिया आइटम के डिसेंडेंट के साथ-साथ किसी भी मीडिया आइटम के लिए, कॉन्टेंट स्टाइल की डिफ़ॉल्ट सेटिंग को बदला जा सकता है. ब्राउज़ किए जा सकने वाले मीडिया आइटम के डिसेंडेंट के लिए डिफ़ॉल्ट वैल्यू को बदलने के लिए, मीडिया आइटम के MediaDescription में एक अतिरिक्त बंडल बनाएं. साथ ही, पहले बताए गए वही संकेत जोड़ें:
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE, उस आइटम के प्ले किए जा सकने वाले डिसेंडेंट पर लागू होता है.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLEउस आइटम के ब्राउज़ किए जा सकने वाले डिसेंडेंट पर लागू होता है.
किसी मीडिया आइटम (उसके डिसेंडेंट नहीं) के लिए डिफ़ॉल्ट सेटिंग को बदलने के लिए, मीडिया आइटम के MediaDescription में एक अतिरिक्त बंडल बनाएं. इसके बाद, कुंजी [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM][8] के साथ कोई सुराग जोड़ें. उस सामान के प्रज़ेंटेशन के बारे में बताने के लिए, पहले बताई गई वैल्यू का इस्तेमाल करें.
इस कोड स्निपेट में, ब्राउज़ किए जा सकने वाले MediaItem को बनाने का तरीका बताया गया है. यह MediaItem, खुद के और अपने डिसेंडेंट के लिए कॉन्टेंट की डिफ़ॉल्ट स्टाइल को बदलता है. यह खुद को कैटगरी की सूची के आइटम के तौर पर स्टाइल करता है. इसके ब्राउज़ किए जा सकने वाले डिसेंडेंट को सूची के आइटम के तौर पर और इसके चलाए जा सकने वाले डिसेंडेंट को ग्रिड आइटम के तौर पर स्टाइल किया जाता है.
Kotlin
import androidx.media.utils.MediaConstants
private fun createBrowsableMediaItem(
mediaId: String,
folderName: String,
iconUri: Uri
): MediaBrowser.MediaItem {
val mediaDescriptionBuilder = MediaDescription.Builder()
mediaDescriptionBuilder.setMediaId(mediaId)
mediaDescriptionBuilder.setTitle(folderName)
mediaDescriptionBuilder.setIconUri(iconUri)
val extras = Bundle()
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM)
mediaDescriptionBuilder.setExtras(extras)
return MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE)
}
Java
import androidx.media.utils.MediaConstants;
private MediaBrowser.MediaItem createBrowsableMediaItem(
String mediaId,
String folderName,
Uri iconUri) {
MediaDescription.Builder mediaDescriptionBuilder = new MediaDescription.Builder();
mediaDescriptionBuilder.setMediaId(mediaId);
mediaDescriptionBuilder.setTitle(folderName);
mediaDescriptionBuilder.setIconUri(iconUri);
Bundle extras = new Bundle();
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM);
mediaDescriptionBuilder.setExtras(extras);
return new MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE);
}
टाइटल के सुझावों का इस्तेमाल करके आइटम ग्रुप करना
मिलते-जुलते मीडिया आइटम को ग्रुप करने के लिए, हर आइटम के लिए सुझाई गई जानकारी का इस्तेमाल करें. ग्रुप में मौजूद हर मीडिया आइटम को, अपने MediaDescription में एक्स्ट्रा बंडल के बारे में बताना होगा. इस बंडल में, [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE][9] कुंजी के साथ एक मैपिंग और एक जैसी स्ट्रिंग वैल्यू शामिल होनी चाहिए. इस स्ट्रिंग को स्थानीय भाषा में बदलें, क्योंकि इसका इस्तेमाल ग्रुप के टाइटल के लिए किया जाता है.
इस कोड स्निपेट में, MediaItem को Songs सबग्रुप हेडिंग के साथ बनाने का तरीका दिखाया गया है:
Kotlin
import androidx.media.utils.MediaConstants
private fun createMediaItem(
mediaId: String,
folderName: String,
iconUri: Uri
): MediaBrowser.MediaItem {
val mediaDescriptionBuilder = MediaDescription.Builder()
mediaDescriptionBuilder.setMediaId(mediaId)
mediaDescriptionBuilder.setTitle(folderName)
mediaDescriptionBuilder.setIconUri(iconUri)
val extras = Bundle()
extras.putString(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE,
"Songs")
mediaDescriptionBuilder.setExtras(extras)
return MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), /* playable or browsable flag*/)
}
Java
import androidx.media.utils.MediaConstants;
private MediaBrowser.MediaItem createMediaItem(String mediaId, String folderName, Uri iconUri) {
MediaDescription.Builder mediaDescriptionBuilder = new MediaDescription.Builder();
mediaDescriptionBuilder.setMediaId(mediaId);
mediaDescriptionBuilder.setTitle(folderName);
mediaDescriptionBuilder.setIconUri(iconUri);
Bundle extras = new Bundle();
extras.putString(
MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE,
"Songs");
mediaDescriptionBuilder.setExtras(extras);
return new MediaBrowser.MediaItem(
mediaDescriptionBuilder.build(), /* playable or browsable flag*/);
}
आपके ऐप्लिकेशन को उन सभी मीडिया आइटम को पास करना होगा जिन्हें आपको एक साथ ब्लॉक के तौर पर ग्रुप करना है. उदाहरण के लिए, मीडिया आइटम के दो ग्रुप, "गाने" और "एल्बम" को इसी क्रम में दिखाने पर विचार करें. अगर आपका ऐप्लिकेशन इस क्रम में पांच मीडिया आइटम पास करता है, तो Android Auto और AAOS इन्हें चार अलग-अलग ग्रुप के तौर पर समझेंगे:
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")के साथ मीडिया आइटम Aextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")वाला मीडिया आइटम Bextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")वाला मीडिया आइटम Cextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")वाला मीडिया आइटम Dextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")वाला मीडिया आइटम E
इस वजह से, ये चार ग्रुप बनते हैं:
- "गाने" नाम वाला ग्रुप 1, जिसमें मीडिया आइटम A शामिल है
- ग्रुप 2, जिसे "एल्बम" कहा जाता है. इसमें मीडिया आइटम B शामिल है
- ग्रुप 3, जिसे "गाने" कहा जाता है. इसमें मीडिया आइटम C और D शामिल हैं
- ग्रुप 4, जिसे "एल्बम" कहा जाता है. इसमें मीडिया आइटम E शामिल है
इन आइटम को दो ग्रुप में दिखाने के लिए, आपके ऐप्लिकेशन को मीडिया आइटम इस क्रम में पास करने होंगे:
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")के साथ मीडिया आइटम Aextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")वाला मीडिया आइटम Cextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")वाला मीडिया आइटम Dextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")वाला मीडिया आइटम Bextras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")वाला मीडिया आइटम E
मेटाडेटा के अन्य इंडिकेटर दिखाना
मीडिया ब्राउज़र ट्री में मौजूद कॉन्टेंट और उसे चलाने के दौरान, एक नज़र में जानकारी देने के लिए, मेटाडेटा इंडिकेटर जोड़े जा सकते हैं.
ब्राउज़ ट्री में, Android Auto और AAOS किसी आइटम से जुड़े अतिरिक्त डेटा को पढ़ते हैं और इंडिकेटर दिखाते हैं. मीडिया चलाने के दौरान, Android Auto और AAOS, मीडिया सेशन के मेटाडेटा को पढ़ते हैं. साथ ही, यह तय करने के लिए कुछ खास कॉन्स्टेंट ढूंढते हैं कि कौनसे इंडिकेटर दिखाने हैं.
तीसरी इमेज. मेटाडेटा के साथ प्लेबैक व्यू.
चौथी इमेज. बिना चलाए गए कॉन्टेंट के लिए ब्राउज़ व्यू.
इन कॉन्स्टेंट का इस्तेमाल, दोनों MediaItem जानकारी वाले एक्सट्रा और
MediaMetadata एक्सट्रा में किया जा सकता है:
[
EXTRA_DOWNLOAD_STATUS][10]: इससे किसी आइटम के डाउनलोड होने की स्थिति के बारे में पता चलता है. इस कॉन्स्टेंट का इस्तेमाल कुंजी के तौर पर करें. इन लंबे समय तक इस्तेमाल किए जा सकने वाले कॉन्स्टेंट की ये वैल्यू हो सकती हैं:- [
STATUS_DOWNLOADED][11]: आइटम पूरी तरह से डाउनलोड हो गया है. - [
STATUS_DOWNLOADING][12]: आइटम डाउनलोड किया जा रहा है. - [
STATUS_NOT_DOWNLOADED][13]: आइटम डाउनलोड नहीं किया गया है.
- [
[
METADATA_KEY_IS_EXPLICIT][14]: इससे पता चलता है कि आइटम में अश्लील कॉन्टेंट मौजूद है. किसी आइटम को अश्लील के तौर पर मार्क करने के लिए, इस कॉन्स्टेंट को कुंजी के तौर पर इस्तेमाल करें. साथ ही, long [METADATA_VALUE_ATTRIBUTE_PRESENT][15] को वैल्यू के तौर पर इस्तेमाल करें.
इन कॉन्स्टेंट का इस्तेमाल MediaItem ब्यौरे वाले एक्सटेंशन में सिर्फ़ तब किया जा सकता है, जब:
[
DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS][16]: इससे लंबी अवधि के कॉन्टेंट के पूरा होने की स्थिति का पता चलता है. जैसे, पॉडकास्ट एपिसोड और ऑडियो बुक. इस कॉन्स्टेंट का इस्तेमाल कुंजी के तौर पर करें. पूर्णांक के इन स्थिरांकों का इस्तेमाल किया जा सकता है:[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED][17]: आइटम नहीं चलाया गया है.[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED][18]: आइटम को कुछ हद तक चलाया गया है और मौजूदा पोज़िशन बीच में कहीं है.[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED][19]: आइटम पूरा हो गया है.
[
DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20]: लंबी अवधि के वीडियो को पूरा करने की प्रोग्रेस दिखाता है. यह 0.0 और 1.0 के बीच की एक डबल वैल्यू होती है. इसमें ये दोनों वैल्यू भी शामिल हैं. इससेPARTIALLY_PLAYINGस्थिति के बारे में ज़्यादा जानकारी मिलती है. इससे Android Auto या AAOS को प्रोग्रेस इंडिकेटर को ज़्यादा बेहतर तरीके से दिखाने में मदद मिलती है. जैसे, प्रोग्रेस बार. अगर आपको इस एक्स्ट्रा का इस्तेमाल करना है, तो [कॉन्टेंट चलने के दौरान ब्राउज़ व्यू में प्रोग्रेस बार अपडेट करना][21] लेख पढ़ें. इसमें बताया गया है कि शुरुआती इंप्रेशन के बाद, इस इंडिकेटर को अप-टू-डेट कैसे रखा जाए.
उपयोगकर्ता के मीडिया ब्राउज़ ट्री ब्राउज़ करते समय दिखने वाले इंडिकेटर दिखाने के लिए, एक ऐसा एक्स्ट्रा बंडल बनाएं जिसमें इनमें से एक या उससे ज़्यादा कॉन्स्टेंट शामिल हों.
इसके बाद, उस बंडल को MediaDescription.Builder.setExtras तरीके से पास करें.
इस स्निपेट में, ऐसे मीडिया आइटम के लिए इंडिकेटर दिखाने का तरीका बताया गया है जो 70% पूरा हो चुका है और जिसमें साफ़ तौर पर यौन गतिविधि दिखाई गई है:
Kotlin
import androidx.media.utils.MediaConstants
val extras = Bundle()
extras.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED)
extras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.7)
val description =
MediaDescriptionCompat.Builder()
.setMediaId(/*...*/)
.setTitle(resources.getString(/*...*/))
.setExtras(extras)
.build()
return MediaBrowserCompat.MediaItem(description, /* flags */)
Java
import androidx.media.utils.MediaConstants;
Bundle extras = new Bundle();
extras.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT);
extras.putInt(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED);
extras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.7);
MediaDescriptionCompat description =
new MediaDescriptionCompat.Builder()
.setMediaId(/*...*/)
.setTitle(resources.getString(/*...*/))
.setExtras(extras)
.build();
return new MediaBrowserCompat.MediaItem(description, /* flags */);
फ़िलहाल चल रहे मीडिया आइटम के लिए इंडिकेटर दिखाने के लिए, अपने mediaSession के MediaMetadataCompat में METADATA_KEY_IS_EXPLICIT या EXTRA_DOWNLOAD_STATUS के लिए वैल्यू तय करें.
इस कोड स्निपेट में बताया गया है कि प्लेबैक व्यू में मौजूद गाना अश्लील है और उसे डाउनलोड किया गया है:
Kotlin
import androidx.media.utils.MediaConstants
mediaSession.setMetadata(
MediaMetadataCompat.Builder()
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, "Song Name")
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, "Artist name")
.putString(
MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI,
albumArtUri.toString())
.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
.putLong(
MediaDescriptionCompat.EXTRA_DOWNLOAD_STATUS,
MediaDescriptionCompat.STATUS_DOWNLOADED)
.build())
Java
import androidx.media.utils.MediaConstants;
mediaSession.setMetadata(
new MediaMetadataCompat.Builder()
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, "Song Name")
.putString(
MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, "Artist name")
.putString(
MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI,
albumArtUri.toString())
.putLong(
MediaConstants.METADATA_KEY_IS_EXPLICIT,
MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
.putLong(
MediaDescriptionCompat.EXTRA_DOWNLOAD_STATUS,
MediaDescriptionCompat.STATUS_DOWNLOADED)
.build());
कॉन्टेंट चलने के दौरान, ब्राउज़ व्यू में प्रोग्रेस बार को अपडेट करता है
ब्राउज़ व्यू में, आंशिक रूप से चलाए गए कॉन्टेंट के लिए प्रोग्रेस बार दिखाने के लिए, [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] extra का इस्तेमाल किया जा सकता है.
हालांकि, अगर कोई उपयोगकर्ता उस कॉन्टेंट को लगातार देखता है जिसे उसने पूरा नहीं देखा है, तो समय के साथ यह इंडिकेटर गलत हो जाता है.
Android Auto और AAOS पर प्रोग्रेस बार को अप-टू-डेट रखने के लिए, MediaMetadataCompat और PlaybackStateCompat में अतिरिक्त जानकारी दें. इससे, ब्राउज़ व्यू में मौजूद मीडिया आइटम से, चल रहे कॉन्टेंट को लिंक किया जा सकेगा.
किसी मीडिया आइटम के लिए, प्रोग्रेस बार अपने-आप अपडेट होने की सुविधा का इस्तेमाल करने के लिए, ये ज़रूरी शर्तें पूरी होनी चाहिए:
जब
MediaItemबनाया जाता है, तब उसे अपने अतिरिक्त एट्रिब्यूट मेंDESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE[DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] भेजना होगा. इसकी वैल्यू0.0और1.0के बीच होनी चाहिए.MediaMetadataCompatको [METADATA_KEY_MEDIA_ID][22] एट्रिब्यूट की वैल्यू के तौर पर एक स्ट्रिंग वैल्यू भेजनी होगी. यह वैल्यू,MediaItemको पास किए गए [मीडिया आईडी][23] एट्रिब्यूट की वैल्यू के बराबर होनी चाहिए.PlaybackStateCompatमें, key [PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID][24] के साथ एक अतिरिक्त शामिल होना चाहिए. यह [मीडिया आईडी][23] के बराबर स्ट्रिंग वैल्यू पर मैप करता है, जिसेMediaItemको पास किया जाता है.
इस कोड स्निपेट में बताया गया है कि ब्राउज़ व्यू में मौजूद किसी आइटम से, चल रहे आइटम को कैसे लिंक किया जाता है:
Kotlin
import androidx.media.utils.MediaConstants
// When the MediaItem is constructed to show in the browse view.
// Suppose the item was 25% complete when the user launched the browse view.
val mediaItemExtras = Bundle()
mediaItemExtras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.25)
val description =
MediaDescriptionCompat.Builder()
.setMediaId("my-media-id")
.setExtras(mediaItemExtras)
// ...and any other setters.
.build()
return MediaBrowserCompat.MediaItem(description, /* flags */)
// Elsewhere, when the user has selected MediaItem for playback.
mediaSession.setMetadata(
MediaMetadataCompat.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, "my-media-id")
// ...and any other setters.
.build())
val playbackStateExtras = Bundle()
playbackStateExtras.putString(
MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID, "my-media-id")
mediaSession.setPlaybackState(
PlaybackStateCompat.Builder()
.setExtras(playbackStateExtras)
// ...and any other setters.
.build())
Java
import androidx.media.utils.MediaConstants;
// When the MediaItem is constructed to show in the browse view.
// Suppose the item was 25% complete when the user launched the browse view.
Bundle mediaItemExtras = new Bundle();
mediaItemExtras.putDouble(
MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.25);
MediaDescriptionCompat description =
new MediaDescriptionCompat.Builder()
.setMediaId("my-media-id")
.setExtras(mediaItemExtras)
// ...and any other setters.
.build();
return new MediaBrowserCompat.MediaItem(description, /* flags */);
// Elsewhere, when the user has selected MediaItem for playback.
mediaSession.setMetadata(
new MediaMetadataCompat.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, "my-media-id")
// ...and any other setters.
.build());
Bundle playbackStateExtras = new Bundle();
playbackStateExtras.putString(
MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID, "my-media-id");
mediaSession.setPlaybackState(
new PlaybackStateCompat.Builder()
.setExtras(playbackStateExtras)
// ...and any other setters.
.build());
```
बिना चलाए गए या पूरी तरह से चलाए गए कॉन्टेंट में भी, अपने-आप अपडेट होने वाला प्रोग्रेस बार दिख सकता है. ऐसा तब होता है, जब मीडिया आइटम में DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE एट्रिब्यूट की वैल्यू 0.0 (बिना चलाए गए) या 1.0 (पूरा चलाए गए) के तौर पर शामिल हो. उपयोगकर्ता के इन मीडिया आइटम को चुनने के बाद, Android Auto और AAOS, प्रोग्रेस बार को अन्य प्रोग्रेस इंडिकेटर के ऊपर दिखाते हैं.
[1]: /training/cars/media/create-media-browser/content-hierarchy [2]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE() [3]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE() [4]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM() [5]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM() [6]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM() [7]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM() [8]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM() [9]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE() [10]: /reference/android/support/v4/media/MediaDescriptionCompat#EXTRA_DOWNLOAD_STATUS() [11]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_DOWNLOADED() [12]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_DOWNLOADING() [13]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_NOT_DOWNLOADED() [14]: /reference/androidx/media/utils/MediaConstants#METADATA_KEY_IS_EXPLICIT() [15]: /reference/androidx/media/utils/MediaConstants#METADATA_VALUE_ATTRIBUTE_PRESENT() [16]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS() [17]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED() [18]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED() [19]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED() [20]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE() [21]: #browse-progress-bar [22]: /reference/android/support/v4/media/MediaMetadataCompat#METADATA_KEY_MEDIA_ID() [23]: /reference/android/support/v4/media/MediaDescriptionCompat.Builder#setMediaId(java.lang.String) [24]: /reference/androidx/media/utils/MediaConstants#PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID()