বিষয়বস্তুর শৈলী প্রয়োগ করুন

আপনার সামগ্রী শ্রেণিবিন্যাস তৈরি করতে ব্রাউজযোগ্য বা খেলার যোগ্য আইটেমগুলি ব্যবহার করার পরে, সেই আইটেমগুলি গাড়িতে কীভাবে প্রদর্শিত হবে তা নির্ধারণ করতে সামগ্রী শৈলী প্রয়োগ করুন৷ এই বিষয়বস্তু শৈলী ব্যবহার করুন:

তালিকা আইটেম

চিত্র 1. তালিকা আইটেমগুলি ছবির উপর শিরোনাম এবং মেটাডেটাকে অগ্রাধিকার দেয়৷

গ্রিড আইটেম

চিত্র 2. গ্রিড আইটেমগুলি শিরোনাম এবং মেটাডেটার চেয়ে চিত্রগুলিকে অগ্রাধিকার দেয়৷

ডিফল্ট সামগ্রী শৈলী সেট করুন

আপনার মিডিয়া আইটেমগুলি কীভাবে প্রদর্শিত হবে তার জন্য আপনি বিশ্বব্যাপী ডিফল্ট সেট করতে পারেন। এটি করার জন্য, আপনার পরিষেবার 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 : সংশ্লিষ্ট আইটেমগুলি "বিভাগ" গ্রিড আইটেম হিসাবে উপস্থাপিত এবং সাধারণ গ্রিড আইটেমগুলির মতো, কিন্তু আইটেমগুলির আইকনগুলির চারপাশে মার্জিন প্রয়োগ করা হয়৷ এটি ছোট আইকনগুলির চেহারা উন্নত করে। আইকনগুলি অবশ্যই টিন্টেবল ভেক্টর অঙ্কনযোগ্য হতে হবে। এই ইঙ্গিত শুধুমাত্র ব্রাউজযোগ্য আইটেম জন্য প্রদান করা হবে বলে আশা করা হচ্ছে.

এই কোড স্নিপেটটি দেখায় কিভাবে ব্রাউজ করা যায় এমন আইটেমগুলির জন্য গ্রিডগুলিতে এবং প্লেযোগ্য আইটেমগুলিকে তালিকার জন্য ডিফল্ট সামগ্রী শৈলী সেট করতে হয়:

কোটলিন

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 কী দিয়ে একটি ইঙ্গিত যোগ করুন। সেই আইটেমের উপস্থাপনা নির্দিষ্ট করতে পূর্বে বর্ণিত একই মানগুলি ব্যবহার করুন৷

এই কোড স্নিপেটটি দেখায় কিভাবে একটি ব্রাউজযোগ্য 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 কী সহ একটি ম্যাপিং এবং একটি অভিন্ন স্ট্রিং মান অন্তর্ভুক্ত করতে হবে৷ এই স্ট্রিংটি স্থানীয়করণ করুন, কারণ এটি গ্রুপের শিরোনামের জন্য ব্যবহৃত হয়।

এই কোড স্নিপেটটি দেখায় কিভাবে Songs একটি সাবগ্রুপ শিরোনাম সহ একটি MediaItem তৈরি করতে হয়:

কোটলিন

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 সেগুলিকে চারটি পৃথক গোষ্ঠী হিসাবে ব্যাখ্যা করবে:

  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

এর ফলে এই চারটি দল হয়:

  • গ্রুপ 1, মিডিয়া আইটেম A ধারণকারী "গান" নামে পরিচিত
  • গ্রুপ 2, "অ্যালবাম" নামে পরিচিত, মিডিয়া আইটেম B ধারণকারী
  • গ্রুপ 3, যাকে "গান" বলা হয়, এতে মিডিয়া আইটেম C এবং D রয়েছে
  • গ্রুপ 4, "অ্যালবাম" নামে পরিচিত, মিডিয়া আইটেম E ধারণকারী

দুটি গ্রুপে এই আইটেমগুলি প্রদর্শন করতে, আপনার অ্যাপটিকে অবশ্যই এই ক্রমে মিডিয়া আইটেমগুলি পাস করতে হবে:

  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

অতিরিক্ত মেটাডেটা সূচক প্রদর্শন করুন

আপনি মিডিয়া ব্রাউজার ট্রি এবং প্লেব্যাকের সময় বিষয়বস্তুর জন্য এক নজরে তথ্য প্রদান করতে অতিরিক্ত মেটাডেটা সূচক অন্তর্ভুক্ত করতে পারেন।

ব্রাউজ ট্রিতে, Android Auto এবং AAOS একটি আইটেমের সাথে সম্পর্কিত অতিরিক্তগুলি পড়ে এবং সূচকগুলি প্রদর্শন করে৷ মিডিয়া প্লেব্যাকের সময়, Android Auto এবং AAOS মিডিয়া সেশনের মেটাডেটা পড়ে এবং কোন সূচকগুলি প্রদর্শন করতে হবে তা নির্ধারণ করতে নির্দিষ্ট ধ্রুবকগুলি সন্ধান করে৷

মেটাডেটা সহ প্লেব্যাক ভিউ

চিত্র 3. মেটাডেটা সহ প্লেব্যাক ভিউ।

প্লে না করা বিষয়বস্তুর জন্য ভিউ ব্রাউজ করুন।

চিত্র 4. প্লে না করা বিষয়বস্তুর জন্য ভিউ ব্রাউজ করুন।

এই ধ্রুবকগুলি MediaItem বিবরণ অতিরিক্ত এবং MediaMetadata অতিরিক্ত উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে:

  • EXTRA_DOWNLOAD_STATUS : একটি আইটেমের ডাউনলোড স্থিতি নির্দেশ করে৷ এই ধ্রুবকটিকে কী হিসাবে ব্যবহার করুন। এই দীর্ঘ ধ্রুবকগুলি সম্ভাব্য মান:

    • STATUS_DOWNLOADED : আইটেম সম্পূর্ণরূপে ডাউনলোড করা হয়েছে৷
    • STATUS_DOWNLOADING : আইটেমটি ডাউনলোডের প্রক্রিয়াধীন৷
    • STATUS_NOT_DOWNLOADED : আইটেমটি ডাউনলোড করা হয়নি৷
  • 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% সম্পূর্ণ একটি সুস্পষ্ট মিডিয়া আইটেমের জন্য সূচকগুলি কীভাবে প্রদর্শন করতে হয় তা দেখায়:

কোটলিন

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

বর্তমানে যে মিডিয়া আইটেমটি চলছে তার জন্য সূচক প্রদর্শন করতে, আপনার mediaSession MediaMetadataCompatMETADATA_KEY_IS_EXPLICIT বা EXTRA_DOWNLOAD_STATUS এর মান ঘোষণা করুন।

এই কোড স্নিপেটটি দেখায় যে কীভাবে প্লেব্যাক ভিউতে গানটি স্পষ্ট এবং ডাউনলোড করা হয়েছে তা নির্দেশ করতে হয়:

কোটলিন

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 অতিরিক্ত ব্যবহার করতে পারেন৷ যাইহোক, যদি একজন ব্যবহারকারী আংশিকভাবে প্লে করা বিষয়বস্তু চালিয়ে যান, তাহলে সময়ের সাথে সাথে সেই সূচকটি ভুল হয়ে যায়।

যাতে Android Auto এবং AAOS অগ্রগতি বারকে আপ টু ডেট রাখে, ব্রাউজ ভিউতে মিডিয়া আইটেমগুলির সাথে চলমান সামগ্রী লিঙ্ক করতে MediaMetadataCompat এবং PlaybackStateCompat এ অতিরিক্ত তথ্য সরবরাহ করে।

একটি মিডিয়া আইটেমের জন্য একটি স্বয়ংক্রিয়ভাবে আপডেট হওয়া অগ্রগতি বার থাকার জন্য, এই প্রয়োজনীয়তাগুলি অবশ্যই পূরণ করতে হবে:

এই কোড স্নিপেটটি দেখায় কিভাবে নির্দেশ করা যায় যে খেলার আইটেমটি ব্রাউজ ভিউতে একটি আইটেমের সাথে লিঙ্ক করা হয়েছে:

কোটলিন

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

P এমনকি প্লে না করা বা সম্পূর্ণভাবে প্লে করা বিষয়বস্তু একটি স্বয়ংক্রিয়ভাবে আপডেট হওয়া অগ্রগতি বার প্রদর্শন করতে পারে। এটি ঘটে যদি সংশ্লিষ্ট মিডিয়া আইটেমগুলিতে DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE অতিরিক্ত অন্তর্ভুক্ত থাকে যার মান 0.0 (প্লে না করার জন্য) বা 1.0 (পুরোপুরি খেলার জন্য)। ব্যবহারকারী এই মিডিয়া আইটেমগুলি নির্বাচন করার পরে, Android Auto এবং AAOS অন্যান্য অগ্রগতি সূচকগুলির উপর অগ্রগতি বার প্রদর্শন করে৷

,

আপনার সামগ্রী শ্রেণিবিন্যাস তৈরি করতে ব্রাউজযোগ্য বা খেলার যোগ্য আইটেমগুলি ব্যবহার করার পরে, সেই আইটেমগুলি গাড়িতে কীভাবে প্রদর্শিত হবে তা নির্ধারণ করতে সামগ্রী শৈলী প্রয়োগ করুন৷ এই বিষয়বস্তু শৈলী ব্যবহার করুন:

তালিকা আইটেম

চিত্র 1. তালিকা আইটেমগুলি ছবির উপর শিরোনাম এবং মেটাডেটাকে অগ্রাধিকার দেয়৷

গ্রিড আইটেম

চিত্র 2. গ্রিড আইটেমগুলি শিরোনাম এবং মেটাডেটার চেয়ে চিত্রগুলিকে অগ্রাধিকার দেয়৷

ডিফল্ট সামগ্রী শৈলী সেট করুন

আপনার মিডিয়া আইটেমগুলি কীভাবে প্রদর্শিত হবে তার জন্য আপনি বিশ্বব্যাপী ডিফল্ট সেট করতে পারেন। এটি করার জন্য, আপনার পরিষেবার 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 : সংশ্লিষ্ট আইটেমগুলি "বিভাগ" গ্রিড আইটেম হিসাবে উপস্থাপিত এবং সাধারণ গ্রিড আইটেমগুলির মতো, কিন্তু আইটেমগুলির আইকনগুলির চারপাশে মার্জিন প্রয়োগ করা হয়৷ এটি ছোট আইকনগুলির চেহারা উন্নত করে। আইকনগুলি অবশ্যই টিন্টেবল ভেক্টর অঙ্কনযোগ্য হতে হবে। এই ইঙ্গিত শুধুমাত্র ব্রাউজযোগ্য আইটেম জন্য প্রদান করা হবে বলে আশা করা হচ্ছে.

এই কোড স্নিপেটটি দেখায় কিভাবে ব্রাউজ করা যায় এমন আইটেমগুলির জন্য গ্রিডগুলিতে এবং প্লেযোগ্য আইটেমগুলিকে তালিকার জন্য ডিফল্ট সামগ্রী শৈলী সেট করতে হয়:

কোটলিন

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 কী দিয়ে একটি ইঙ্গিত যোগ করুন। সেই আইটেমের উপস্থাপনা নির্দিষ্ট করতে পূর্বে বর্ণিত একই মানগুলি ব্যবহার করুন৷

এই কোড স্নিপেটটি দেখায় কিভাবে একটি ব্রাউজযোগ্য 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 কী সহ একটি ম্যাপিং এবং একটি অভিন্ন স্ট্রিং মান অন্তর্ভুক্ত করতে হবে৷ এই স্ট্রিংটি স্থানীয়করণ করুন, কারণ এটি গ্রুপের শিরোনামের জন্য ব্যবহৃত হয়।

এই কোড স্নিপেটটি দেখায় কিভাবে Songs একটি সাবগ্রুপ শিরোনাম সহ একটি MediaItem তৈরি করতে হয়:

কোটলিন

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 সেগুলিকে চারটি পৃথক গোষ্ঠী হিসাবে ব্যাখ্যা করবে:

  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

এর ফলে এই চারটি দল হয়:

  • গ্রুপ 1, মিডিয়া আইটেম A ধারণকারী "গান" নামে পরিচিত
  • গ্রুপ 2, "অ্যালবাম" নামে পরিচিত, মিডিয়া আইটেম B ধারণকারী
  • গ্রুপ 3, যাকে "গান" বলা হয়, এতে মিডিয়া আইটেম C এবং D রয়েছে
  • গ্রুপ 4, "অ্যালবাম" নামে পরিচিত, মিডিয়া আইটেম E ধারণকারী

দুটি গ্রুপে এই আইটেমগুলি প্রদর্শন করতে, আপনার অ্যাপটিকে অবশ্যই এই ক্রমে মিডিয়া আইটেমগুলি পাস করতে হবে:

  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

অতিরিক্ত মেটাডেটা সূচক প্রদর্শন করুন

আপনি মিডিয়া ব্রাউজার ট্রি এবং প্লেব্যাকের সময় বিষয়বস্তুর জন্য এক নজরে তথ্য প্রদান করতে অতিরিক্ত মেটাডেটা সূচক অন্তর্ভুক্ত করতে পারেন।

ব্রাউজ ট্রিতে, Android Auto এবং AAOS একটি আইটেমের সাথে সম্পর্কিত অতিরিক্তগুলি পড়ে এবং সূচকগুলি প্রদর্শন করে৷ মিডিয়া প্লেব্যাকের সময়, Android Auto এবং AAOS মিডিয়া সেশনের মেটাডেটা পড়ে এবং কোন সূচকগুলি প্রদর্শন করতে হবে তা নির্ধারণ করতে নির্দিষ্ট ধ্রুবকগুলি সন্ধান করে৷

মেটাডেটা সহ প্লেব্যাক ভিউ

চিত্র 3. মেটাডেটা সহ প্লেব্যাক ভিউ।

প্লে না করা বিষয়বস্তুর জন্য ভিউ ব্রাউজ করুন।

চিত্র 4. প্লে না করা বিষয়বস্তুর জন্য ভিউ ব্রাউজ করুন।

এই ধ্রুবকগুলি MediaItem বিবরণ অতিরিক্ত এবং MediaMetadata অতিরিক্ত উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে:

  • EXTRA_DOWNLOAD_STATUS : একটি আইটেমের ডাউনলোড স্থিতি নির্দেশ করে৷ এই ধ্রুবকটিকে কী হিসাবে ব্যবহার করুন। এই দীর্ঘ ধ্রুবকগুলি সম্ভাব্য মান:

    • STATUS_DOWNLOADED : আইটেম সম্পূর্ণরূপে ডাউনলোড করা হয়েছে৷
    • STATUS_DOWNLOADING : আইটেমটি ডাউনলোডের প্রক্রিয়াধীন৷
    • STATUS_NOT_DOWNLOADED : আইটেমটি ডাউনলোড করা হয়নি৷
  • 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% সম্পূর্ণ একটি সুস্পষ্ট মিডিয়া আইটেমের জন্য সূচকগুলি কীভাবে প্রদর্শন করতে হয় তা দেখায়:

কোটলিন

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

বর্তমানে যে মিডিয়া আইটেমটি চলছে তার জন্য সূচক প্রদর্শন করতে, আপনার mediaSession MediaMetadataCompatMETADATA_KEY_IS_EXPLICIT বা EXTRA_DOWNLOAD_STATUS এর মান ঘোষণা করুন।

এই কোড স্নিপেটটি দেখায় যে কীভাবে প্লেব্যাক ভিউতে গানটি স্পষ্ট এবং ডাউনলোড করা হয়েছে তা নির্দেশ করতে হয়:

কোটলিন

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 অতিরিক্ত ব্যবহার করতে পারেন৷ যাইহোক, যদি একজন ব্যবহারকারী আংশিকভাবে প্লে করা বিষয়বস্তু চালিয়ে যান, তাহলে সময়ের সাথে সাথে সেই সূচকটি ভুল হয়ে যায়।

যাতে Android Auto এবং AAOS অগ্রগতি বারকে আপ টু ডেট রাখে, ব্রাউজ ভিউতে মিডিয়া আইটেমগুলির সাথে চলমান সামগ্রী লিঙ্ক করতে MediaMetadataCompat এবং PlaybackStateCompat এ অতিরিক্ত তথ্য সরবরাহ করে।

একটি মিডিয়া আইটেমের জন্য একটি স্বয়ংক্রিয়ভাবে আপডেট হওয়া অগ্রগতি বার থাকার জন্য, এই প্রয়োজনীয়তাগুলি অবশ্যই পূরণ করতে হবে:

এই কোড স্নিপেটটি দেখায় কিভাবে নির্দেশ করা যায় যে খেলার আইটেমটি ব্রাউজ ভিউতে একটি আইটেমের সাথে লিঙ্ক করা হয়েছে:

কোটলিন

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

P এমনকি প্লে না করা বা সম্পূর্ণভাবে প্লে করা বিষয়বস্তু একটি স্বয়ংক্রিয়ভাবে আপডেট হওয়া অগ্রগতি বার প্রদর্শন করতে পারে। এটি ঘটে যদি সংশ্লিষ্ট মিডিয়া আইটেমগুলিতে DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE অতিরিক্ত অন্তর্ভুক্ত থাকে যার মান 0.0 (প্লে না করার জন্য) বা 1.0 (পুরোপুরি খেলার জন্য)। ব্যবহারকারী এই মিডিয়া আইটেমগুলি নির্বাচন করার পরে, Android Auto এবং AAOS অন্যান্য অগ্রগতি সূচকগুলির উপর অগ্রগতি বার প্রদর্শন করে৷