اعمال سبک های محتوا

پس از استفاده از آیتم‌های قابل مرور یا قابل پخش برای [ایجاد سلسله مراتب محتوای خود][1]، سبک‌های محتوا را برای تعیین نحوه نمایش این آیتم‌ها در خودرو اعمال کنید. از این سبک‌های محتوا استفاده کنید:

موارد را فهرست کنید

شکل ۱. موارد فهرست، عناوین و فراداده‌ها را نسبت به تصاویر در اولویت قرار می‌دهند.

آیتم‌های شبکه‌ای

شکل ۲. آیتم‌های جدولی، تصاویر را نسبت به عناوین و فراداده‌ها در اولویت قرار می‌دهند.

تنظیم سبک‌های محتوای پیش‌فرض

شما می‌توانید پیش‌فرض‌های سراسری را برای نحوه نمایش آیتم‌های رسانه‌ای خود تنظیم کنید. برای انجام این کار، ثابت‌های خاصی را در بسته BrowserRoot extras که توسط پیاده‌سازی [ onGetRoot ][1 ] سرویس شما برگردانده می‌شود، قرار دهید و برای تعیین سبک مناسب، به دنبال این ثابت‌ها بگردید.

این موارد اضافی می‌توانند به عنوان کلید در بسته استفاده شوند:

  • [ 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]: موارد مربوطه به عنوان موارد لیست "رده" ارائه می‌شوند، مشابه موارد لیست معمولی، اما حاشیه‌هایی در اطراف آیکون‌های موارد اعمال می‌شود. این امر ظاهر آیکون‌های کوچک را بهبود می‌بخشد. آیکون‌ها باید بردارهای قابل ترسیم با قابلیت رنگ‌آمیزی باشند. این نکته را فقط برای موارد قابل مرور ارائه دهید.

  • [ DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM ][7]: آیتم‌های مربوطه به صورت آیتم‌های شبکه‌ای "رده" نمایش داده می‌شوند و مشابه آیتم‌های شبکه‌ای معمولی هستند، اما حاشیه‌هایی در اطراف آیکون‌های آیتم‌ها اعمال می‌شود. این کار ظاهر آیکون‌های کوچک را بهبود می‌بخشد. آیکون‌ها باید بردارهای قابل ترسیم با قابلیت رنگ‌آمیزی باشند. این نکته را فقط برای آیتم‌های قابل مرور ارائه دهید.

این قطعه کد نحوه تنظیم سبک محتوای پیش‌فرض برای موارد قابل مرور به صورت شبکه‌ای و موارد قابل پخش به صورت لیست را نشان می‌دهد:

کاتلین

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)
}

جاوا

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 خودش را به عنوان یک آیتم فهرست دسته‌بندی، فرزندان قابل مرورش را به عنوان آیتم‌های فهرست و فرزندان قابل پخشش را به عنوان آیتم‌های شبکه‌ای سبک‌بندی می‌کند.

کاتلین

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)
}

جاوا

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 را نشان می‌دهد:

کاتلین

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

جاوا

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 آنها را به عنوان چهار گروه جداگانه تفسیر می‌کنند:

  • مورد رسانه‌ای 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")

این منجر به این چهار گروه می‌شود:

  • گروه ۱، با نام «آهنگ‌ها»، حاوی آیتم رسانه‌ای A
  • گروه ۲، با نام «آلبوم‌ها»، حاوی مورد رسانه‌ای B
  • گروه ۳، به نام «آهنگ‌ها»، شامل موارد رسانه‌ای C و D
  • گروه ۴، با نام «آلبوم‌ها»، شامل آیتم رسانه‌ای 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 فراداده‌های مربوط به جلسه رسانه را می‌خوانند و به دنبال ثابت‌های خاصی می‌گردند تا تعیین کنند کدام شاخص‌ها را نمایش دهند.

نمای پخش با فراداده

شکل ۳. نمای پخش به همراه فراداده.

برای محتوای پخش نشده، به بخش View بروید.

شکل ۴. نمای مرور برای محتوای پخش نشده.

این ثابت‌ها می‌توانند هم در توضیحات MediaItem و هم در MediaMetadata استفاده شوند:

  • [ EXTRA_DOWNLOAD_STATUS ][10 ]: وضعیت دانلود یک آیتم را نشان می‌دهد. از این ثابت به عنوان کلید استفاده کنید. این ثابت‌های طولانی مقادیر ممکن هستند:

    • [ STATUS_DOWNLOADED ][11 ]: مورد به طور کامل دانلود شده است.
    • [ STATUS_DOWNLOADING ][12 ]: مورد در حال دانلود است.
    • [ STATUS_NOT_DOWNLOADED ][13]: مورد دانلود نشده است.
  • [ METADATA_KEY_IS_EXPLICIT ][14]: نشان می‌دهد که آیتم حاوی محتوای صریح است. برای نشان دادن اینکه یک آیتم صریح است، از این ثابت به عنوان کلید و از [ 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 اجازه می‌دهد تا یک نشانگر پیشرفت معنادارتر، مانند یک نوار پیشرفت، نمایش دهند. اگر از این مورد اضافی استفاده می‌کنید، برای یادگیری نحوه به‌روز نگه داشتن این نشانگر پس از نمایش اولیه، به [Update the progress bar in browse view while content plays][21] مراجعه کنید.

برای نمایش نشانگرهایی که هنگام مرور درخت مرور رسانه توسط کاربر ظاهر می‌شوند، یک بسته اضافی ایجاد کنید که شامل یک یا چند مورد از این ثابت‌ها باشد. سپس، آن بسته را به متد MediaDescription.Builder.setExtras منتقل کنید.

این قطعه کد نحوه نمایش شاخص‌ها برای یک آیتم رسانه‌ای مشخص که ۷۰٪ تکمیل شده است را نشان می‌دهد:

کاتلین

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

جاوا

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

برای نمایش نشانگرهای یک آیتم رسانه‌ای که در حال پخش است، مقادیری را برای METADATA_KEY_IS_EXPLICIT یا EXTRA_DOWNLOAD_STATUS در MediaMetadataCompat مربوط به mediaSession خود تعریف کنید.

این قطعه کد نشان می‌دهد که چگونه می‌توان نشان داد که آهنگ در نمای پخش، صریح و دانلود شده است:

کاتلین

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())

جاوا

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] برای نمایش نوار پیشرفت محتوای نیمه‌پخش‌شده در نمای مرور استفاده کنید. با این حال، اگر کاربری به پخش محتوای نیمه‌پخش‌شده ادامه دهد، این نشانگر به مرور زمان نادرست می‌شود.

برای اینکه Android Auto و AAOS نوار پیشرفت را به‌روز نگه دارند، اطلاعات اضافی را در MediaMetadataCompat و PlaybackStateCompat ارائه دهید تا محتوای در حال انجام را به موارد رسانه‌ای در نمای مرور پیوند دهید.

برای اینکه یک آیتم رسانه‌ای نوار پیشرفت به‌روزرسانی خودکار داشته باشد، باید این الزامات رعایت شود:

  • پس از ایجاد، MediaItem باید عبارت [ DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE ][20] را در قسمت‌های اضافی خود با مقداری بین 0.0 و 1.0 ارسال کند.

  • MediaMetadataCompat باید [ METADATA_KEY_MEDIA_ID ][22] را به همراه یک مقدار رشته‌ای برابر با [media ID][23] ارسال شده به MediaItem ارسال کند.

  • PlaybackStateCompat باید شامل یک کلید اضافی با نام [ PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID ][24] باشد که به یک مقدار رشته‌ای برابر با [media ID][23] ارسال شده به MediaItem نگاشت می‌شود.

این قطعه کد نشان می‌دهد که چگونه می‌توان نشان داد که آیتم در حال پخش به یک آیتم در نمای مرور لینک شده است:

کاتلین

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())

جاوا

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()