প্লেব্যাক নিয়ন্ত্রণ সক্ষম করুন

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 স্বয়ংক্রিয়ভাবে গাড়ির সিস্টেমে অডিও সামগ্রী পাঠায় গাড়ির স্পীকারে চালানোর জন্য৷

অডিও বিষয়বস্তু চালানোর বিষয়ে আরও জানতে, মিডিয়া প্লেয়ার ওভারভিউ , অডিও অ্যাপ ওভারভিউ এবং ExoPlayer ওভারভিউ দেখুন।

স্ট্যান্ডার্ড প্লেব্যাক অ্যাকশন সেট করুন

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

আপনার অ্যাপ অতিরিক্তভাবে নিম্নলিখিত ক্রিয়াগুলিকে সমর্থন করতে পারে যদি সেগুলি অ্যাপের সামগ্রীর সাথে প্রাসঙ্গিক হয়:

উপরন্তু, আপনি ব্যবহারকারীর জন্য প্রদর্শনের জন্য ঐচ্ছিকভাবে একটি প্লে সারি তৈরি করতে পারেন। এটি করার জন্য, setQueue এবং setQueueTitle পদ্ধতিতে কল করুন, ACTION_SKIP_TO_QUEUE_ITEM অ্যাকশন সক্রিয় করুন এবং onSkipToQueueItem কলব্যাক সংজ্ঞায়িত করুন।

এছাড়াও, Now Playing আইকনের জন্য সমর্থন যোগ করুন, যা কি বাজছে তার জন্য একটি সূচক। এটি করার জন্য, setActiveQueueItemId পদ্ধতিতে কল করুন এবং সারিতে থাকা আইটেমটির আইডি পাস করুন। যখনই সারি পরিবর্তন হয় তখন আপনাকে setActiveQueueItemId আপডেট করতে হবে।

অ্যান্ড্রয়েড অটো এবং AAOS ডিসপ্লে বোতাম প্রতিটি সক্রিয় অ্যাকশনের পাশাপাশি প্লেব্যাক সারির জন্য। যখন ব্যবহারকারীরা এই বোতামগুলিতে ক্লিক করেন, সিস্টেমটি MediaSessionCompat.Callback থেকে সংশ্লিষ্ট কলব্যাক আহ্বান করে।

অব্যবহৃত স্থান সংরক্ষণ করুন

ACTION_SKIP_TO_PREVIOUS এবং ACTION_SKIP_TO_NEXT অ্যাকশনের জন্য UI-তে Android Auto এবং AAOS রিজার্ভ স্পেস। যদি আপনার অ্যাপ এই ফাংশনগুলির একটিকে সমর্থন না করে, তাহলে 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 এর সাথে মিল রয়েছে৷ এই ধ্রুবকগুলিকে বান্ডেলে কী হিসাবে ব্যবহার করুন এবং বুলিয়ান true মান হিসাবে ব্যবহার করুন।

প্রাথমিক প্লেব্যাকস্টেট সেট করুন

যেহেতু Android Auto এবং AAOS আপনার মিডিয়া ব্রাউজার পরিষেবার সাথে যোগাযোগ করে, আপনার মিডিয়া সেশন PlaybackStateCompat ব্যবহার করে সামগ্রী প্লেব্যাকের অবস্থার সাথে যোগাযোগ করে৷

AAOS বা Android Auto আপনার মিডিয়া ব্রাউজার পরিষেবার সাথে সংযোগ করলে আপনার অ্যাপটি স্বয়ংক্রিয়ভাবে সঙ্গীত বাজানো শুরু করবে না। পরিবর্তে, গাড়ির অবস্থা বা ব্যবহারকারীর ক্রিয়াকলাপগুলির উপর ভিত্তি করে প্লেব্যাক পুনরায় শুরু করতে বা শুরু করতে Android Auto এবং AAOS-এর উপর নির্ভর করুন৷

এটি সম্পন্ন করতে, আপনার মিডিয়া সেশনের প্রাথমিক PlaybackStateCompat STATE_STOPPED , STATE_PAUSED , STATE_NONE , বা STATE_ERROR এ সেট করুন।

অ্যান্ড্রয়েড অটো এবং AAOS-এর মধ্যে মিডিয়া সেশনগুলি শুধুমাত্র ড্রাইভের সময়কালের জন্য স্থায়ী হয়, তাই ব্যবহারকারীরা এই সেশনগুলি ঘন ঘন শুরু করে এবং বন্ধ করে। ড্রাইভগুলির মধ্যে একটি নিরবচ্ছিন্ন অভিজ্ঞতা প্রচার করতে, ব্যবহারকারীর পূর্ববর্তী সেশনের অবস্থার উপর নজর রাখুন, যাতে যখন মিডিয়া অ্যাপটি একটি সারসংকলন অনুরোধ পায়, ব্যবহারকারী স্বয়ংক্রিয়ভাবে যেখানে তারা ছেড়েছিল সেখান থেকে শুরু করতে পারে৷ উদাহরণস্বরূপ, সর্বশেষ প্লে করা মিডিয়া আইটেম, PlaybackStateCompat , এবং সারি৷

কাস্টম প্লেব্যাক অ্যাকশন যোগ করুন

আপনার মিডিয়া অ্যাপ সমর্থন করে এমন অতিরিক্ত ক্রিয়া প্রদর্শন করতে আপনি কাস্টম প্লেব্যাক অ্যাকশন যোগ করতে পারেন। যদি স্থান অনুমতি দেয় (এবং আপনি এটি সংরক্ষণ না করেন), Android পরিবহন নিয়ন্ত্রণে কাস্টম অ্যাকশন যোগ করে। অন্যথায়, কাস্টম ক্রিয়াগুলি ওভারফ্লো মেনুতে উপস্থিত হয়। অ্যান্ড্রয়েড কাস্টম অ্যাকশনগুলিকে আপনি 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());

এই পদ্ধতির আরও বিস্তারিত উদাহরণের জন্য, GitHub-এ ইউনিভার্সাল অ্যান্ড্রয়েড মিউজিক প্লেয়ার নমুনা অ্যাপে 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)) {
        ...
    }
}

আরও জানতে, GitHub-এ ইউনিভার্সাল অ্যান্ড্রয়েড মিউজিক প্লেয়ার নমুনা অ্যাপে onCustomAction পদ্ধতিটি দেখুন।

কাস্টম অ্যাকশনের জন্য আইকন তৈরি করুন

আপনার তৈরি করা প্রতিটি কাস্টম অ্যাকশনের জন্য একটি আইকন প্রয়োজন।

যদি সেই আইকনের বর্ণনা CommandButton.ICON_ ধ্রুবকগুলির একটির সাথে মিলে যায়, কাস্টম অ্যাকশনের অতিরিক্তগুলির EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT কী-এর জন্য পূর্ণসংখ্যার মান সেট করুন৷ সমর্থিত সিস্টেমে, এটি করা CustomAction.Builder এ পাস করা আইকন সংস্থানকে ওভাররাইড করে, যা সিস্টেমের উপাদানগুলিকে আপনার অ্যাকশন এবং অন্যান্য প্লেব্যাক অ্যাকশনগুলিকে ধারাবাহিকভাবে রেন্ডার করার অনুমতি দেয়।

আপনাকে অবশ্যই একটি আইকন সংস্থান নির্দিষ্ট করতে হবে৷ গাড়ির অ্যাপ্লিকেশানগুলি বিভিন্ন স্ক্রিনের আকার এবং ঘনত্বে চলতে পারে, তাই আপনি যে আইকনগুলি প্রদান করেন তা অবশ্যই ভেক্টর ড্রয়েবল হতে হবে৷ বিশদ হারানো ছাড়া সম্পদ স্কেল করতে একটি ভেক্টর অঙ্কনযোগ্য ব্যবহার করুন। একটি ভেক্টর অঙ্কনযোগ্য ছোট রেজোলিউশনে প্রান্ত এবং কোণগুলিকে পিক্সেল সীমানায় সারিবদ্ধ করতে পারে।

যদি একটি কাস্টম অ্যাকশন স্টেটফুল হয় (যদি এটি একটি প্লেব্যাক সেটিং চালু বা বন্ধ করে) তবে ব্যবহারকারীদের অ্যাকশন নির্বাচন করার সময় পরিবর্তন দেখতে সাহায্য করার জন্য বিভিন্ন রাজ্যের জন্য বিভিন্ন আইকন প্রদান করুন।

অক্ষম কর্মের জন্য বিকল্প আইকন শৈলী প্রদান করুন

যখন একটি কাস্টম অ্যাকশন বর্তমান প্রেক্ষাপটের জন্য অনুপলব্ধ থাকে, তখন একটি বিকল্প আইকনের সাথে কাস্টম অ্যাকশন আইকনটি অদলবদল করুন যা ক্রিয়াটিকে নিষ্ক্রিয় হিসাবে দেখায়৷

অফ-স্টাইল কাস্টম অ্যাকশন আইকনের নমুনা।
চিত্র 1. অফ-স্টাইল কাস্টম অ্যাকশন আইকনের নমুনা।

অডিও বিন্যাস নির্দেশ করুন

প্লেয়িং মিডিয়া একটি বিশেষ অডিও ফর্ম্যাট ব্যবহার করে তা নির্দেশ করতে, আপনি এই বৈশিষ্ট্যটিকে সমর্থন করে এমন গাড়িগুলিতে রেন্ডার করা আইকনগুলি নির্দিষ্ট করতে পারেন৷ আপনি KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI এবং KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI বর্তমানে প্লে করা মিডিয়া আইটেমের অতিরিক্ত বান্ডেলে সেট করতে পারেন ( MediaSession.setMetadata এ পাস করা হয়েছে)। বিভিন্ন লেআউট মিটমাট করার জন্য উভয় অতিরিক্ত সেট করুন।

এছাড়াও, আপনি গাড়ির OEM-কে জানাতে অতিরিক্ত KEY_IMMERSIVE_AUDIO সেট করতে পারেন যে এটি নিমজ্জিত অডিও, এবং নিমজ্জিত বিষয়বস্তুতে হস্তক্ষেপ করতে পারে এমন অডিও প্রভাব প্রয়োগ করবেন কিনা তা সিদ্ধান্ত নেওয়ার সময় তাদের খুব সতর্ক হওয়া উচিত।

আপনি প্লেয়িং মিডিয়া আইটেমটি কনফিগার করতে পারেন যাতে এর সাবটাইটেল, বিবরণ বা উভয়ই অন্যান্য মিডিয়া আইটেমের লিঙ্ক। এটি ব্যবহারকারীকে দ্রুত সম্পর্কিত আইটেমগুলিতে যেতে দেয়; উদাহরণস্বরূপ, তারা একই শিল্পীর অন্যান্য গানে বা পডকাস্টের অন্যান্য পর্বে ঝাঁপিয়ে পড়তে পারে। যদি গাড়িটি এই বৈশিষ্ট্যটিকে সমর্থন করে, ব্যবহারকারীরা সেই সামগ্রীটি ব্রাউজ করতে লিঙ্কটিতে ট্যাপ করতে পারেন।

লিঙ্ক যোগ করতে, KEY_SUBTITLE_LINK_MEDIA_ID মেটাডেটা কনফিগার করুন (সাবটাইটেল থেকে লিঙ্ক করতে) বা KEY_DESCRIPTION_LINK_MEDIA_ID (বিবরণ থেকে লিঙ্ক করতে)। বিস্তারিত জানার জন্য, সেই মেটাডেটা ক্ষেত্রের রেফারেন্স ডকুমেন্টেশন দেখুন।