Android Auto এবং Android Automotive OS (AAOS)-এ মিডিয়া প্লেব্যাক চালু করতে, একটি মিডিয়া সেশন রেজিস্টার করে এবং এর কলব্যাক মেথডগুলো হ্যান্ডেল করার মাধ্যমে প্লেব্যাক কন্ট্রোলগুলো প্রয়োগ করুন। এই পৃষ্ঠায় ব্যাখ্যা করা হয়েছে কীভাবে:
আপনার মিডিয়া ব্রাউজার সার্ভিসে একটি
MediaSessionCompatঅবজেক্ট রেজিস্টার করুন।ব্যবহারকারীর প্লেব্যাক অনুরোধে সাড়া দেওয়ার জন্য
MediaSessionCompat.Callbackমেথডগুলো প্রয়োগ করুন।স্ট্যান্ডার্ড এবং কাস্টম প্লেব্যাক অ্যাকশন কনফিগার করুন।
আপনার মিডিয়া সেশনের জন্য প্রাথমিক প্লেব্যাক অবস্থা সেট করুন।
অডিও ফরম্যাট নির্দেশ করতে আইকন যোগ করুন।
সক্রিয়ভাবে প্লে হওয়া মিডিয়া আইটেমগুলো থেকে লিঙ্ক তৈরি করুন।
Android Auto এবং AAOS আপনার পরিষেবার জন্য MediaSessionCompat এর মাধ্যমে প্লেব্যাক নিয়ন্ত্রণের কমান্ড পাঠায়। আপনাকে অবশ্যই একটি সেশন নিবন্ধন করতে হবে এবং সংশ্লিষ্ট কলব্যাক মেথডগুলো প্রয়োগ করতে হবে।
একটি মিডিয়া সেশন নিবন্ধন করুন
আপনার মিডিয়া ব্রাউজার সার্ভিসের onCreate মেথডে, MediaSessionCompat এর একটি ইনস্ট্যান্স তৈরি করুন, তারপর মিডিয়া সেশনটি রেজিস্টার করার জন্য setSessionToken কল করুন। এই কোড স্নিপেটটি দেখায় কিভাবে একটি মিডিয়া সেশন তৈরি এবং রেজিস্টার করতে হয়:
কোটলিন
override fun onCreate() {
super.onCreate()
...
// Start a new MediaSession.
val session = MediaSessionCompat(this, "session tag").apply {
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
setCallback(MyMediaSessionCallback())
}
sessionToken = session.sessionToken
...
}
জাভা
public void onCreate() {
super.onCreate();
...
// Start a new MediaSession.
MediaSessionCompat session = new MediaSessionCompat(this, "session tag");
setSessionToken(session.getSessionToken());
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
session.setCallback(new MyMediaSessionCallback());
...
}
যখন আপনি মিডিয়া সেশন অবজেক্ট তৈরি করেন, তখন আপনি একটি কলব্যাক অবজেক্ট সেট করেন যা প্লেব্যাক নিয়ন্ত্রণের অনুরোধগুলো পরিচালনা করতে ব্যবহৃত হয়। আপনার অ্যাপের জন্য MediaSessionCompat.Callback ক্লাসের একটি ইমপ্লিমেন্টেশন প্রদান করার মাধ্যমে আপনি এই কলব্যাক অবজেক্টটি তৈরি করেন। পরবর্তী বিভাগে এই অবজেক্টটি কীভাবে ইমপ্লিমেন্ট করতে হয় তা আলোচনা করা হয়েছে।
প্লে কমান্ডগুলো বাস্তবায়ন করুন
যখন কোনো ব্যবহারকারী আপনার অ্যাপ থেকে কোনো মিডিয়া আইটেম প্লেব্যাকের জন্য অনুরোধ করেন, তখন Android Automotive OS এবং Android Auto আপনার অ্যাপের মিডিয়া ব্রাউজার সার্ভিস থেকে প্রাপ্ত MediaSessionCompat অবজেক্টের MediaSessionCompat.Callback ক্লাসটি ব্যবহার করে। যখন কোনো ব্যবহারকারী কন্টেন্ট প্লেব্যাক নিয়ন্ত্রণ করতে চান, যেমন প্লেব্যাক থামানো বা পরবর্তী ট্র্যাকে যাওয়া, তখন Android Auto এবং Android Automotive OS কলব্যাক অবজেক্টের কোনো একটি মেথডকে কল করে।
কন্টেন্ট প্লেব্যাক পরিচালনা করার জন্য, আপনার অ্যাপকে অবশ্যই অ্যাবস্ট্রাক্ট MediaSessionCompat.Callback ক্লাসটি এক্সটেন্ড করতে হবে এবং আপনার অ্যাপ যে মেথডগুলো সাপোর্ট করে, সেগুলো ইমপ্লিমেন্ট করতে হবে।
আপনার অ্যাপে প্রদত্ত কন্টেন্টের ধরনের জন্য প্রাসঙ্গিক এই প্রতিটি কলব্যাক মেথড প্রয়োগ করুন:
-
onPrepare - মিডিয়া সোর্স পরিবর্তিত হলে AAOS এই মেথডটি কল করে।
-
onPlay ব্যবহারকারী কোনো নির্দিষ্ট আইটেম নির্বাচন না করে প্লে নির্বাচন করলে এটি চালু হয়। আপনার অ্যাপকে অবশ্যই তার ডিফল্ট কন্টেন্ট প্লে করতে হবে অথবা, যদি
onPauseদিয়ে প্লেব্যাক থামানো হয়ে থাকে, তবে আপনার অ্যাপ প্লেব্যাক পুনরায় শুরু করবে।-
onPlayFromMediaId যখন ব্যবহারকারী কোনো নির্দিষ্ট আইটেম চালাতে চান, তখন এটি চালু হয়। এই মেথডটি সেই আইডিটি গ্রহণ করে, যা আপনার মিডিয়া ব্রাউজার সার্ভিস কন্টেন্ট হায়ারার্কিতে মিডিয়া আইটেমটিকে বরাদ্দ করেছে।
-
onPlayFromSearch ব্যবহারকারী যখন কোনো সার্চ কোয়েরি থেকে প্লে করার সিদ্ধান্ত নেন, তখন এটি সক্রিয় হয়। প্রদত্ত সার্চ স্ট্রিং-এর উপর ভিত্তি করে অ্যাপটিকে অবশ্যই একটি উপযুক্ত সিদ্ধান্ত নিতে হবে।
-
onPause যখন ব্যবহারকারী প্লেব্যাক থামাতে চান তখন এটি সক্রিয় হয়।
-
onSkipToNext যখন ব্যবহারকারী পরবর্তী আইটেমে যেতে চান, তখন এটি সক্রিয় হয়।
-
onSkipToPrevious যখন ব্যবহারকারী পূর্ববর্তী আইটেমে যেতে চান, তখন এটি সক্রিয় হয়।
-
onStop যখন ব্যবহারকারী প্লে বন্ধ করতে চান, তখন এটি চালু হয়। নির্বাচিত ফলাফলটি প্রদান করার জন্য আপনার অ্যাপে এই মেথডগুলো ওভাররাইড করুন। কোনো মেথডের উদ্দেশ্য যদি আপনার অ্যাপ দ্বারা সমর্থিত না হয়, তবে সেটি ইমপ্লিমেন্ট করার প্রয়োজন নেই। উদাহরণস্বরূপ, যদি আপনার অ্যাপ কোনো লাইভস্ট্রিম, যেমন খেলাধুলার সম্প্রচার, প্লে করে, তাহলে আপনার
onSkipToNextইমপ্লিমেন্ট করার প্রয়োজন নেই। এর পরিবর্তে,onSkipToNextএর ডিফল্ট ইমপ্লিমেন্টেশন ব্যবহার করুন।
গাড়ির স্পিকারের মাধ্যমে কন্টেন্ট চালানোর জন্য আপনার অ্যাপের কোনো বিশেষ লজিকের প্রয়োজন নেই। যখন আপনার অ্যাপ কন্টেন্ট চালানোর জন্য কোনো অনুরোধ পায়, তখন এটি ঠিক সেভাবেই অডিও প্লে করে, যেভাবে ব্যবহারকারীর ফোনের স্পিকার বা হেডফোনের মাধ্যমে কন্টেন্ট চলে। অ্যান্ড্রয়েড অটো এবং AAOS স্বয়ংক্রিয়ভাবে অডিও কন্টেন্টটি গাড়ির সিস্টেমে পাঠিয়ে দেয়, যাতে তা গাড়ির স্পিকারের মাধ্যমে প্লে হয়।
অডিও কন্টেন্ট প্লে করা সম্পর্কে আরও জানতে, মিডিয়া প্লেয়ার ওভারভিউ , অডিও অ্যাপ ওভারভিউ এবং এক্সোপ্লেয়ার ওভারভিউ দেখুন।
স্ট্যান্ডার্ড প্লেব্যাক অ্যাকশন সেট করুন
Android Auto এবং AAOS, PlaybackStateCompat অবজেক্টে সক্রিয় করা অ্যাকশনগুলোর উপর ভিত্তি করে প্লেব্যাক কন্ট্রোল প্রদর্শন করে। ডিফল্টরূপে, আপনার অ্যাপকে অবশ্যই নিম্নলিখিত অ্যাকশনগুলো সমর্থন করতে হবে:
আপনার অ্যাপটি অতিরিক্তভাবে নিম্নলিখিত কাজগুলো সমর্থন করতে পারে, যদি সেগুলো অ্যাপটির বিষয়বস্তুর সাথে প্রাসঙ্গিক হয়:
এছাড়াও, আপনি চাইলে ব্যবহারকারীকে দেখানোর জন্য একটি প্লে কিউ তৈরি করতে পারেন। এটি করার জন্য, setQueue এবং setQueueTitle মেথডগুলো কল করুন, ACTION_SKIP_TO_QUEUE_ITEM অ্যাকশনটি এনাবল করুন এবং onSkipToQueueItem কলব্যাকটি ডিফাইন করুন।
এছাড়াও, 'Now playing' আইকনের জন্য সাপোর্ট যোগ করুন, যা বর্তমানে কী চলছে তার একটি নির্দেশক। এটি করার জন্য, setActiveQueueItemId মেথডটি কল করুন এবং কিউ-তে চলতে থাকা আইটেমটির আইডি পাস করুন। যখনই কিউ-তে কোনো পরিবর্তন হবে, আপনাকে setActiveQueueItemId আপডেট করতে হবে।
অ্যান্ড্রয়েড অটো এবং AAOS প্রতিটি সক্রিয় অ্যাকশনের জন্য বাটন এবং সেইসাথে প্লেব্যাক কিউ প্রদর্শন করে। যখন ব্যবহারকারীরা এই বাটনগুলিতে ক্লিক করেন, তখন সিস্টেম MediaSessionCompat.Callback থেকে সংশ্লিষ্ট কলব্যাকটি কল করে।
অব্যবহৃত স্থান সংরক্ষণ করুন
Android Auto এবং AAOS তাদের ইউজার ইন্টারফেসে ACTION_SKIP_TO_PREVIOUS এবং ACTION_SKIP_TO_NEXT অ্যাকশনগুলোর জন্য জায়গা সংরক্ষিত রাখে। যদি আপনার অ্যাপ এই ফাংশনগুলোর কোনোটি সমর্থন না করে, তাহলে Android Auto এবং AAOS আপনার তৈরি করা যেকোনো কাস্টম অ্যাকশন দেখানোর জন্য সেই জায়গাটি ব্যবহার করে।
আপনি যদি কাস্টম অ্যাকশন দিয়ে ওই জায়গাগুলো পূরণ করতে না চান, তাহলে সেগুলোকে সংরক্ষিত করে রাখতে পারেন, যাতে আপনার অ্যাপটি সংশ্লিষ্ট ফাংশনটি সমর্থন না করলে Android Auto এবং AAOS জায়গাটি খালি রাখে।
এটি করার জন্য, সংরক্ষিত ফাংশনগুলোর সাথে সঙ্গতিপূর্ণ কনস্ট্যান্ট ধারণকারী একটি এক্সট্রাস বান্ডেল সহ setExtras মেথডটি কল করুন। SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT হলো ACTION_SKIP_TO_NEXT এর সঙ্গতিপূর্ণ, এবং SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV হলো ACTION_SKIP_TO_PREVIOUS সঙ্গতিপূর্ণ। এই কনস্ট্যান্টগুলোকে বান্ডেলের কী (key) হিসেবে এবং বুলিয়ান true ভ্যালু (value) হিসেবে ব্যবহার করুন।
প্রাথমিক প্লেব্যাক অবস্থা সেট করুন
যেহেতু Android Auto এবং AAOS আপনার মিডিয়া ব্রাউজার সার্ভিসের সাথে যোগাযোগ করে, তাই আপনার মিডিয়া সেশন PlaybackStateCompat ব্যবহার করে কন্টেন্ট প্লেব্যাকের অবস্থা জানিয়ে থাকে।
AAOS বা Android Auto আপনার মিডিয়া ব্রাউজার সার্ভিসের সাথে সংযুক্ত হলে আপনার অ্যাপের স্বয়ংক্রিয়ভাবে গান বাজানো শুরু করা উচিত নয়। এর পরিবর্তে, গাড়ির অবস্থা বা ব্যবহারকারীর কার্যকলাপের উপর ভিত্তি করে প্লেব্যাক পুনরায় শুরু বা শুরু করার জন্য Android Auto এবং AAOS-এর উপর নির্ভর করুন।
এটি সম্পন্ন করতে, আপনার মিডিয়া সেশনের প্রাথমিক PlaybackStateCompat STATE_STOPPED , STATE_PAUSED , STATE_NONE বা STATE_ERROR এ সেট করুন।
Android Auto এবং AAOS-এর মিডিয়া সেশনগুলো শুধুমাত্র ড্রাইভ চলাকালীন সময়টুকুই স্থায়ী হয়, তাই ব্যবহারকারীরা এই সেশনগুলো ঘন ঘন শুরু এবং বন্ধ করেন। ড্রাইভের মধ্যে একটি নির্বিঘ্ন অভিজ্ঞতা নিশ্চিত করতে, ব্যবহারকারীর পূর্ববর্তী সেশনের অবস্থা ট্র্যাক করুন, যাতে মিডিয়া অ্যাপটি পুনরায় শুরু করার অনুরোধ পেলে, ব্যবহারকারী স্বয়ংক্রিয়ভাবে সেখান থেকেই শুরু করতে পারেন যেখানে তিনি শেষ করেছিলেন। উদাহরণস্বরূপ, সর্বশেষ প্লে করা মিডিয়া আইটেম, PlaybackStateCompat এবং কিউ।
কাস্টম প্লেব্যাক অ্যাকশন যোগ করুন
আপনার মিডিয়া অ্যাপ যে অতিরিক্ত অ্যাকশনগুলো সমর্থন করে, সেগুলো দেখানোর জন্য আপনি কাস্টম প্লেব্যাক অ্যাকশন যোগ করতে পারেন। যদি জায়গা থাকে (এবং আপনি তা সংরক্ষণ না করেন), অ্যান্ড্রয়েড কাস্টম অ্যাকশনগুলোকে ট্রান্সপোর্ট কন্ট্রোল-এ যোগ করে। অন্যথায়, কাস্টম অ্যাকশনগুলো ওভারফ্লো মেনুতে প্রদর্শিত হয়। আপনি PlaybackStateCompat এ কাস্টম অ্যাকশনগুলো যে ক্রমে যোগ করেন, অ্যান্ড্রয়েড সেই ক্রমেই সেগুলো প্রদর্শন করে।
স্ট্যান্ডার্ড অ্যাকশন থেকে স্বতন্ত্র আচরণ প্রদানের জন্য কাস্টম অ্যাকশন ব্যবহার করুন। স্ট্যান্ডার্ড অ্যাকশন প্রতিস্থাপন বা নকল করার জন্য এগুলো ব্যবহার করবেন না।
কাস্টম অ্যাকশন যোগ করতে, PlaybackStateCompat.Builder ক্লাসের addCustomAction মেথডটি ব্যবহার করুন। এই কোড স্নিপেটটি দেখাচ্ছে কিভাবে 'একটি রেডিও চ্যানেল শুরু করুন' নামে একটি কাস্টম অ্যাকশন যোগ করতে হয়:
কোটলিন
val customActionExtras = Bundle()
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO)
stateBuilder.addCustomAction(
PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon // or R.drawable.media3_icon_radio
).run {
setExtras(customActionExtras)
build()
}
)
জাভা
Bundle customActionExtras = new Bundle();
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO);
stateBuilder.addCustomAction(
new PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon) // or R.drawable.media3_icon_radio
.setExtras(customActionExtras)
.build());
এই পদ্ধতির আরও বিস্তারিত উদাহরণের জন্য, গিটহাবে থাকা ইউনিভার্সাল অ্যান্ড্রয়েড মিউজিক প্লেয়ার স্যাম্পল অ্যাপের setCustomAction মেথডটি দেখুন। আপনার কাস্টম অ্যাকশন তৈরি করার পরে, onCustomAction মেথডটি ওভাররাইড করে আপনার মিডিয়া সেশন সেই অ্যাকশনগুলিতে সাড়া দিতে পারে।
এই কোড স্নিপেটটি দেখায় যে আপনার অ্যাপ কীভাবে "একটি রেডিও চ্যানেল শুরু করুন" অ্যাকশনে সাড়া দিতে পারে:
কোটলিন
override fun onCustomAction(action: String, extras: Bundle?) {
when(action) {
CUSTOM_ACTION_START_RADIO_FROM_MEDIA -> {
...
}
}
}
জাভা
@Override
public void onCustomAction(@NonNull String action, Bundle extras) {
if (CUSTOM_ACTION_START_RADIO_FROM_MEDIA.equals(action)) {
...
}
}
আরও জানতে, গিটহাবে থাকা ইউনিভার্সাল অ্যান্ড্রয়েড মিউজিক প্লেয়ার স্যাম্পল অ্যাপের onCustomAction মেথডটি দেখুন।
কাস্টম অ্যাকশনের জন্য আইকন তৈরি করুন
আপনার তৈরি করা প্রতিটি কাস্টম অ্যাকশনের জন্য একটি আইকন প্রয়োজন।
যদি সেই আইকনের বিবরণ CommandButton.ICON_ কনস্ট্যান্টগুলোর কোনো একটির সাথে মিলে যায়, তাহলে কাস্টম অ্যাকশনের এক্সট্রাসের EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT কী-টির জন্য ইন্টিজার ভ্যালুটি সেট করুন। সমর্থিত সিস্টেমগুলোতে, এটি করলে CustomAction.Builder এ পাঠানো আইকন রিসোর্সটি ওভাররাইড হয়ে যায়, যার ফলে সিস্টেম কম্পোনেন্টগুলো আপনার অ্যাকশন এবং অন্যান্য প্লেব্যাক অ্যাকশনগুলো সামঞ্জস্যপূর্ণভাবে রেন্ডার করতে পারে।
আপনাকে অবশ্যই একটি আইকন রিসোর্সও নির্দিষ্ট করতে হবে। গাড়ির অ্যাপগুলো বিভিন্ন স্ক্রিন সাইজ এবং ডেনসিটিতে চলতে পারে, তাই আপনার দেওয়া আইকনগুলো অবশ্যই ভেক্টর ড্রয়েবল হতে হবে। ডিটেইল না হারিয়ে অ্যাসেট স্কেল করার জন্য একটি ভেক্টর ড্রয়েবল ব্যবহার করুন। একটি ভেক্টর ড্রয়েবল ছোট রেজোলিউশনেও এর প্রান্ত এবং কোণাগুলোকে পিক্সেল সীমানার সাথে সারিবদ্ধ করতে পারে।
যদি কোনো কাস্টম অ্যাকশন স্টেটফুল হয় (অর্থাৎ, এটি যদি প্লেব্যাক সেটিং চালু বা বন্ধ করে), তাহলে বিভিন্ন স্টেটের জন্য আলাদা আলাদা আইকন দিন, যাতে ব্যবহারকারীরা অ্যাকশনটি নির্বাচন করার সময় পরিবর্তনটি দেখতে পান।
অক্ষম ক্রিয়াগুলির জন্য বিকল্প আইকন শৈলী প্রদান করুন
যখন কোনো কাস্টম অ্যাকশন বর্তমান প্রেক্ষাপটের জন্য অনুপলব্ধ থাকে, তখন কাস্টম অ্যাকশন আইকনটিকে এমন একটি বিকল্প আইকন দিয়ে পরিবর্তন করুন যা অ্যাকশনটিকে নিষ্ক্রিয় হিসেবে দেখায়।

অডিও ফরম্যাট নির্দেশ করুন
প্লে হওয়া মিডিয়াটি একটি বিশেষ অডিও ফরম্যাট ব্যবহার করছে তা বোঝানোর জন্য, আপনি এমন আইকন নির্দিষ্ট করতে পারেন যা এই বৈশিষ্ট্য সমর্থনকারী কার্ডগুলিতে রেন্ডার করা হয়। আপনি বর্তমানে প্লে হওয়া মিডিয়া আইটেমের (যা MediaSession.setMetadata তে পাস করা হয়) এক্সট্রাস বান্ডেলে KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI এবং KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI সেট করতে পারেন। বিভিন্ন লেআউটের সাথে সামঞ্জস্য রাখতে উভয় এক্সট্রাস সেট করুন।
এছাড়াও, আপনি KEY_IMMERSIVE_AUDIO এক্সট্রাটি সেট করে গাড়ি প্রস্তুতকারকদের (OEMs) জানাতে পারেন যে এটি একটি ইমারসিভ অডিও, এবং এমন কোনো অডিও ইফেক্ট প্রয়োগ করার সিদ্ধান্ত নেওয়ার ক্ষেত্রে তাদের অত্যন্ত সতর্ক থাকা উচিত যা ইমারসিভ কন্টেন্টের সাথে সাংঘর্ষিক হতে পারে।
বর্তমানে প্লে হওয়া আইটেম থেকে লিঙ্ক যোগ করুন
আপনি প্লে হওয়া মিডিয়া আইটেমটি এমনভাবে কনফিগার করতে পারেন যাতে এর সাবটাইটেল, বিবরণ বা উভয়ই অন্যান্য মিডিয়া আইটেমের লিঙ্ক হিসেবে কাজ করে। এর ফলে ব্যবহারকারী দ্রুত সম্পর্কিত আইটেমগুলোতে যেতে পারেন; উদাহরণস্বরূপ, তারা একই শিল্পীর অন্য গানে বা কোনো পডকাস্টের অন্য পর্বে যেতে পারেন। যদি গাড়িতে এই ফিচারটি থাকে, তবে ব্যবহারকারীরা লিঙ্কটিতে ট্যাপ করে সেই কন্টেন্টটি ব্রাউজ করতে পারবেন।
লিঙ্ক যোগ করতে, KEY_SUBTITLE_LINK_MEDIA_ID মেটাডেটা (সাবটাইটেল থেকে লিঙ্ক করার জন্য) অথবা KEY_DESCRIPTION_LINK_MEDIA_ID (ডেসক্রিপশন থেকে লিঙ্ক করার জন্য) কনফিগার করুন। বিস্তারিত জানতে, ঐ মেটাডেটা ফিল্ডগুলোর রেফারেন্স ডকুমেন্টেশন দেখুন।