कॉन्टेंट स्टाइल लागू करें

कॉन्टेंट हैरारकी बनाने के लिए, ब्राउज़ किए जा सकने वाले या चलाए जा सकने वाले आइटम का इस्तेमाल करें. इसके बाद, यह तय करने के लिए कि ये आइटम कार में कैसे दिखेंगे, इन पर कॉन्टेंट स्टाइल लागू करें. कॉन्टेंट की इन स्टाइल का इस्तेमाल करें:

आइटम की सूची

पहली इमेज. लिस्ट आइटम में, इमेज के मुकाबले टाइटल और मेटाडेटा को प्राथमिकता दी जाती है.

ग्रिड आइटम

दूसरी इमेज. ग्रिड आइटम में, टाइटल और मेटाडेटा के मुकाबले इमेज को प्राथमिकता दी जाती है.

कॉन्टेंट की डिफ़ॉल्ट स्टाइल सेट करना

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

इन एक्स्ट्रा का इस्तेमाल, बंडल में कुंजियों के तौर पर किया जा सकता है:

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE: ब्राउज़ ट्री में मौजूद, ब्राउज़ किए जा सकने वाले सभी आइटम के लिए, प्रज़ेंटेशन हिंट.

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE: ब्राउज़ ट्री में मौजूद, चलाए जा सकने वाले सभी आइटम के लिए, प्रज़ेंटेशन हिंट.

इन आइटम के प्रज़ेंटेशन पर असर डालने के लिए, इन कुंजियों को इन इंटिजर कॉन्स्टैंट वैल्यू पर मैप किया जा सकता है:

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM: इससे जुड़े आइटम, लिस्ट आइटम के तौर पर दिखते हैं.

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM: इससे जुड़े आइटम, ग्रिड आइटम के तौर पर दिखते हैं.

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM: इससे जुड़े आइटम, "कैटगरी" लिस्ट आइटम के तौर पर दिखते हैं. ये सामान्य लिस्ट आइटम की तरह ही होते हैं. हालांकि, आइटम के आइकॉन के चारों ओर मार्जिन लागू किए जाते हैं. इससे छोटे आइकॉन बेहतर दिखते हैं. आइकॉन, टिंट किए जा सकने वाले वेक्टर ड्रॉएबल होने चाहिए. यह हिंट सिर्फ़ ब्राउज़ किए जा सकने वाले आइटम के लिए दें.

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM: इससे जुड़े आइटम, "कैटगरी" ग्रिड आइटम के तौर पर दिखते हैं. ये सामान्य ग्रिड आइटम की तरह ही होते हैं. हालांकि, आइटम के आइकॉन के चारों ओर मार्जिन लागू किए जाते हैं. इससे छोटे आइकॉन बेहतर दिखते हैं. आइकॉन, टिंट किए जा सकने वाले वेक्टर ड्रॉएबल होने चाहिए. यह हिंट सिर्फ़ ब्राउज़ किए जा सकने वाले आइटम के लिए दें.

इस कोड स्निपेट में, ब्राउज़ किए जा सकने वाले आइटम के लिए डिफ़ॉल्ट कॉन्टेंट स्टाइल को ग्रिड पर और चलाए जा सकने वाले आइटम के लिए लिस्ट पर सेट करने का तरीका बताया गया है:

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 के साथ. उस आइटम के प्रज़ेंटेशन के बारे में बताने के लिए, पहले बताई गई वैल्यू का इस्तेमाल करें.

इस कोड स्निपेट में, ब्राउज़ किए जा सकने वाला 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 कुंजी और एक जैसी स्ट्रिंग वैल्यू वाली मैपिंग शामिल होनी चाहिए. इस स्ट्रिंग को स्थानीय भाषा में बदलें, क्योंकि इसका इस्तेमाल ग्रुप के टाइटल के लिए किया जाता है.

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

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*/);
}

आपके ऐप्लिकेशन को, ग्रुप किए जाने वाले सभी मीडिया आइटम को एक साथ पास करना होगा. उदाहरण के लिए, "Songs" और "Albums" के दो ग्रुप को इसी क्रम में दिखाने पर विचार करें. अगर आपका ऐप्लिकेशन, पांच मीडिया आइटम को इस क्रम में पास करता है, तो Android Auto और AAOS इन्हें चार अलग-अलग ग्रुप के तौर पर दिखाते हैं:

  • मीडिया आइटम A, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") शामिल है
  • मीडिया आइटम B, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") शामिल है
  • मीडिया आइटम C, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") शामिल है
  • मीडिया आइटम D, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") शामिल है
  • मीडिया आइटम E, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") शामिल है

इससे ये चार ग्रुप बनते हैं:

  • पहला ग्रुप, "Songs" नाम का है. इसमें मीडिया आइटम A शामिल है
  • दूसरा ग्रुप, "Albums" नाम का है. इसमें मीडिया आइटम B शामिल है
  • तीसरा ग्रुप, "Songs" नाम का है. इसमें मीडिया आइटम C और D शामिल हैं
  • चौथा ग्रुप, "Albums" नाम का है. इसमें मीडिया आइटम E शामिल है

इन आइटम को दो ग्रुप में दिखाने के लिए, आपके ऐप्लिकेशन को मीडिया आइटम को इस क्रम में पास करना होगा:

  • मीडिया आइटम A, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") शामिल है
  • मीडिया आइटम C, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") शामिल है
  • मीडिया आइटम D, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") शामिल है
  • मीडिया आइटम B, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") शामिल है
  • मीडिया आइटम E, जिसमें extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") शामिल है

मेटाडेटा के अन्य इंडिकेटर दिखाना

मीडिया ब्राउज़र ट्री में मौजूद कॉन्टेंट और प्लेबैक के दौरान, एक नज़र में जानकारी देने के लिए, मेटाडेटा के अन्य इंडिकेटर शामिल किए जा सकते हैं.

ब्राउज़ ट्री में, Android Auto और AAOS किसी आइटम से जुड़े एक्स्ट्रा को पढ़ते हैं और इंडिकेटर दिखाते हैं. मीडिया प्लेबैक के दौरान, Android Auto और AAOS, मीडिया सेशन के मेटाडेटा को पढ़ते हैं. साथ ही, यह तय करने के लिए खास कॉन्स्टैंट देखते हैं कि कौनसे इंडिकेटर दिखाने हैं.

मेटाडेटा के साथ प्लेबैक व्यू

तीसरी इमेज. मेटाडेटा के साथ प्लेबैक व्यू.

बिना चलाए गए कॉन्टेंट के लिए ब्राउज़ व्यू.

चौथी इमेज. बिना चलाए गए कॉन्टेंट के लिए ब्राउज़ व्यू.

इन कॉन्स्टैंट का इस्तेमाल, MediaItem के ब्यौरे के एक्स्ट्रा और MediaMetadata के एक्स्ट्रा दोनों में किया जा सकता है:

  • EXTRA_DOWNLOAD_STATUS: यह बताता है कि कोई आइटम डाउनलोड हुआ है या नहीं. इस कॉन्स्टैंट का इस्तेमाल, कुंजी के तौर पर करें. ये लॉन्ग कॉन्स्टैंट, संभावित वैल्यू हैं:

  • METADATA_KEY_IS_EXPLICIT: यह बताता है कि आइटम में आपत्तिजनक कॉन्टेंट है. यह बताने के लिए कि किसी आइटम में आपत्तिजनक कॉन्टेंट है, इस कॉन्स्टैंट का इस्तेमाल कुंजी के तौर पर करें. साथ ही, वैल्यू के तौर पर, लॉन्ग METADATA_VALUE_ATTRIBUTE_PRESENT का इस्तेमाल करें.

इन कॉन्स्टैंट का इस्तेमाल, सिर्फ़ MediaItem के ब्यौरे के एक्स्ट्रा में किया जा सकता है:

  • DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS: यह पॉडकास्ट एपिसोड और ऑडियोबुक जैसे लंबे फ़ॉर्मैट वाले कॉन्टेंट के पूरा होने की स्थिति के बारे में बताता है. इस कॉन्स्टैंट का इस्तेमाल, कुंजी के तौर पर करें. ये इंटिजर कॉन्स्टैंट, संभावित वैल्यू हैं:

  • DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE: यह लंबे फ़ॉर्मैट वाले कॉन्टेंट के पूरा होने की प्रोग्रेस को 0.0 और 1.0 के बीच की डबल वैल्यू के तौर पर दिखाता है. इसमें ये दोनों वैल्यू भी शामिल हैं. इससे PARTIALLY_PLAYING स्थिति के बारे में ज़्यादा जानकारी मिलती है. इससे Android Auto या AAOS, प्रोग्रेस बार जैसे ज़्यादा काम के प्रोग्रेस इंडिकेटर दिखा पाते हैं. अगर इस एक्स्ट्रा का इस्तेमाल किया जाता है, तो कॉन्टेंट चलने के दौरान ब्राउज़ व्यू में प्रोग्रेस बार अपडेट करें लेख पढ़ें. इससे आपको यह जानने में मदद मिलेगी कि शुरुआती इंप्रेशन के बाद, इस इंडिकेटर को अप-टू-डेट कैसे रखा जाए.

ऐसे इंडिकेटर दिखाने के लिए जो उपयोगकर्ता के मीडिया ब्राउज़ ट्री ब्राउज़ करने के दौरान दिखते हैं, एक एक्स्ट्रा बंडल बनाएं. इसमें इनमें से एक या ज़्यादा कॉन्स्टैंट शामिल करें. इसके बाद, उस बंडल को 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 एक्स्ट्रा का इस्तेमाल करके, ब्राउज़ व्यू में आंशिक रूप से चलाए गए कॉन्टेंट के लिए प्रोग्रेस बार दिखाया जा सकता है. हालांकि, अगर कोई उपयोगकर्ता आंशिक रूप से चलाए गए कॉन्टेंट को चलाना जारी रखता है, तो समय के साथ वह इंडिकेटर सटीक नहीं रहता.

ताकि Android Auto और AAOS, प्रोग्रेस बार को अप-टू-डेट रख सकें, इसलिए MediaMetadataCompat और PlaybackStateCompat में अतिरिक्त जानकारी दें. इससे, चल रहे कॉन्टेंट को ब्राउज़ व्यू में मौजूद मीडिया आइटम से लिंक किया जा सकेगा.

किसी मीडिया आइटम के लिए, अपने-आप अपडेट होने वाला प्रोग्रेस बार दिखाने के लिए, ये ज़रूरी शर्तें पूरी होनी चाहिए:

  • `MediaItem`MediaItem बनाते समय, इसके एक्स्ट्रा में DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE को वैल्यू के साथ भेजना ज़रूरी है. इसमें 0.0 और 1.0 के बीच की वैल्यू भी शामिल हैं.

  • MediaMetadataCompat को METADATA_KEY_MEDIA_ID को, MediaItem को पास किए गए मीडिया आईडी के बराबर स्ट्रिंग वैल्यू के साथ भेजना ज़रूरी है.

  • PlaybackStateCompat में, कुंजी PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID वाला एक एक्स्ट्रा शामिल होना चाहिए. यह 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, अन्य प्रोग्रेस इंडिकेटर के ऊपर प्रोग्रेस बार दिखाते हैं.