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

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

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

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

চিত্র ৪। যে কন্টেন্টগুলো দেখা হয়নি, সেগুলোর জন্য ব্রাউজ ভিউ।
এই ধ্রুবকগুলি MediaItem বর্ণনা এক্সট্রা এবং MediaMetadata এক্সট্রা উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে:
EXTRA_DOWNLOAD_STATUS: কোনো আইটেমের ডাউনলোড স্ট্যাটাস নির্দেশ করে। এই কনস্ট্যান্টটিকে কী (key) হিসেবে ব্যবহার করুন। এই লং কনস্ট্যান্টগুলো সম্ভাব্য ভ্যালু হতে পারে:-
STATUS_DOWNLOADED: আইটেমটি সম্পূর্ণভাবে ডাউনলোড হয়েছে। -
STATUS_DOWNLOADING: আইটেমটি ডাউনলোড হচ্ছে। -
STATUS_NOT_DOWNLOADED: আইটেমটি ডাউনলোড করা হয়নি।
-
METADATA_KEY_IS_EXPLICIT: নির্দেশ করে যে আইটেমটিতে আপত্তিকর বিষয়বস্তু রয়েছে। কোনো আইটেমকে আপত্তিকর হিসেবে চিহ্নিত করতে, এই কনস্ট্যান্টটিকে কী (key) হিসেবে এবং লংMETADATA_VALUE_ATTRIBUTE_PRESENTভ্যালু (value) হিসেবে ব্যবহার করুন।
এই ধ্রুবকগুলি শুধুমাত্র MediaItem বর্ণনার অতিরিক্ত অংশে ব্যবহার করা যাবে:
DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS: পডকাস্ট এপিসোড এবং অডিওবুকের মতো দীর্ঘ কন্টেন্টের সমাপ্তির অবস্থা নির্দেশ করে। এই কনস্ট্যান্টটিকে কী (key) হিসেবে ব্যবহার করুন। এই পূর্ণসংখ্যা কনস্ট্যান্টগুলো হলো সম্ভাব্য মান:DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED: আইটেমটি খেলা হয়নি।DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED: আইটেমটি আংশিকভাবে খেলা হয়েছে, এবং বর্তমান অবস্থানটি মাঝামাঝি কোথাও রয়েছে।DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED: আইটেমটি সম্পূর্ণ হয়েছে।
DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE: দীর্ঘ কন্টেন্টের সমাপ্তির অগ্রগতি নির্দেশ করে, যা ০.০ থেকে ১.০-এর মধ্যে একটি ডাবল সংখ্যা দ্বারা প্রকাশ করা হয়। এটিPARTIALLY_PLAYINGঅবস্থা সম্পর্কে আরও তথ্য প্রদান করে, যার ফলে Android Auto বা AAOS একটি প্রোগ্রেস বারের মতো আরও অর্থবহ অগ্রগতি সূচক প্রদর্শন করতে পারে। আপনি যদি এই অতিরিক্ত বৈশিষ্ট্যটি ব্যবহার করেন, তাহলে প্রাথমিক ইম্প্রেশনের পরে এই সূচকটিকে কীভাবে হালনাগাদ রাখবেন তা জানতে “কন্টেন্ট চলার সময় ব্রাউজ ভিউতে প্রোগ্রেস বার আপডেট করুন” দেখুন।
ব্যবহারকারী যখন মিডিয়া ব্রাউজ ট্রি ব্রাউজ করেন, তখন যে ইন্ডিকেটরগুলো দেখা যায় তা প্রদর্শন করতে, একটি এক্সট্রাস বান্ডেল তৈরি করুন যাতে এই কনস্ট্যান্টগুলোর এক বা একাধিক অন্তর্ভুক্ত থাকে। তারপর, সেই বান্ডেলটি 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 */);
বর্তমানে প্লে হওয়া কোনো মিডিয়া আইটেমের জন্য ইন্ডিকেটর প্রদর্শন করতে, আপনার mediaSession এর MediaMetadataCompat এ METADATA_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 এক্সট্রাটি ব্যবহার করতে পারেন। তবে, যদি কোনো ব্যবহারকারী আংশিকভাবে প্লে হওয়া কন্টেন্টটি চালানো চালিয়ে যান, তাহলে সময়ের সাথে সাথে সেই সূচকটি ভুল তথ্য প্রদর্শন করে।
যাতে অ্যান্ড্রয়েড অটো এবং AAOS প্রোগ্রেস বারটি হালনাগাদ রাখে, সেজন্য ব্রাউজ ভিউতে থাকা মিডিয়া আইটেমগুলোর সাথে চলমান কন্টেন্টকে লিঙ্ক করতে MediaMetadataCompat এবং PlaybackStateCompat এ অতিরিক্ত তথ্য সরবরাহ করুন।
কোনো মিডিয়া আইটেমের প্রোগ্রেস বার স্বয়ংক্রিয়ভাবে আপডেট হওয়ার জন্য, এই শর্তগুলো অবশ্যই পূরণ করতে হবে:
তৈরি করার সময়,
MediaItemঅবশ্যই তার extras-এDESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGEপাঠাতে হবে, যার মান0.0থেকে1.0মধ্যে থাকবে।MediaMetadataCompatঅবশ্যইMETADATA_KEY_MEDIA_IDপাঠাতে হবে, যার স্ট্রিং ভ্যালুটিMediaItemএ পাঠানো মিডিয়া আইডির সমান হবে।PlaybackStateCompatঅবশ্যইPLAYBACK_STATE_EXTRAS_KEY_MEDIA_IDকী-সহ একটি এক্সট্রা অন্তর্ভুক্ত থাকতে হবে, যা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 অন্যান্য প্রোগ্রেস ইন্ডিকেটরের উপরে এই প্রোগ্রেস বারটি প্রদর্শন করে।