प्लेबैक कंट्रोल चालू करें

Android Auto और Android Automotive OS (AAOS) में मीडिया चलाने की सुविधा चालू करने के लिए, मीडिया सेशन रजिस्टर करें. साथ ही, उसके कॉलबैक के तरीकों को हैंडल करके, प्लेबैक कंट्रोल लागू करें. इस पेज पर, ये काम करने का तरीका बताया गया है:

  • अपने मीडिया ब्राउज़र सेवा में, MediaSessionCompat ऑब्जेक्ट रजिस्टर करना.

  • उपयोगकर्ता के प्लेबैक के अनुरोधों का जवाब देने के लिए, MediaSessionCompat.Callback के तरीके लागू करना.

  • प्लेबैक की स्टैंडर्ड और कस्टम कार्रवाइयां कॉन्फ़िगर करना.

  • अपने मीडिया सेशन के लिए, शुरुआती प्लेबैक की स्थिति सेट करना.

  • ऑडियो फ़ॉर्मैट की जानकारी देने के लिए, आइकॉन जोड़ना.

  • फ़िलहाल चल रहे मीडिया आइटम से लिंक बनाना.

Android Auto और AAOS, आपकी सेवा के लिए MediaSessionCompat के ज़रिए, प्लेबैक कंट्रोल के कमांड भेजते हैं. आपको एक सेशन रजिस्टर करना होगा और उससे जुड़े कॉलबैक के तरीके लागू करने होंगे.

मीडिया सेशन रजिस्टर करना

अपने मीडिया ब्राउज़र सेवा के onCreate तरीके में, MediaSessionCompat का एक इंस्टेंस बनाएं. इसके बाद, setSessionToken को कॉल करें ताकि मीडिया सेशन रजिस्टर हो जाए. इस कोड स्निपेट में, मीडिया सेशन बनाने और रजिस्टर करने का तरीका बताया गया है:

Kotlin

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

Java

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 के डिफ़ॉल्ट तरीके का इस्तेमाल करें.

कार के स्पीकर से कॉन्टेंट चलाने के लिए, आपके ऐप्लिकेशन को किसी खास लॉजिक की ज़रूरत नहीं होती. जब आपके ऐप्लिकेशन को कॉन्टेंट चलाने का अनुरोध मिलता है, तो वह ऑडियो को उसी तरह चलाता है जिस तरह उपयोगकर्ता के फ़ोन के स्पीकर या हेडफ़ोन से कॉन्टेंट चलाया जाता है. Android Auto और AAOS, ऑडियो कॉन्टेंट को कार के स्पीकर से चलाने के लिए, उसे कार के सिस्टम को अपने-आप भेज देते हैं.

ऑडियो कॉन्टेंट चलाने के बारे में ज़्यादा जानने के लिए, मीडिया प्लेयर की खास जानकारी, ऑडियो ऐप्लिकेशन की खास जानकारी, और ExoPlayer की खास जानकारी लेख पढ़ें.

प्लेबैक की स्टैंडर्ड कार्रवाइयां सेट करना

Android Auto और AAOS, ऑब्जेक्ट में चालू की गई PlaybackStateCompat कार्रवाइयों के आधार पर, प्लेबैक कंट्रोल दिखाते हैं. डिफ़ॉल्ट रूप से, आपके ऐप्लिकेशन को इन कार्रवाइयों के लिए सहायता देनी होगी:

अगर ये कार्रवाइयां, ऐप्लिकेशन के कॉन्टेंट के लिए काम की हैं, तो आपका ऐप्लिकेशन इनके लिए भी सहायता दे सकता है:

इसके अलावा, आपके पास उपयोगकर्ता को दिखाने के लिए, प्ले क्यू बनाने का विकल्प भी होता है. इसके लिए, setQueue और setQueueTitle तरीकों को कॉल करें, ACTION_SKIP_TO_QUEUE_ITEM कार्रवाई चालू करें, और onSkipToQueueItem कॉलबैक तय करें.

इसके अलावा, फ़िलहाल चल रहा है आइकॉन के लिए सहायता जोड़ें. यह आइकॉन, चल रहे कॉन्टेंट की जानकारी देता है. इसके लिए, setActiveQueueItemId तरीके को कॉल करें और क्यू में चल रहे आइटम का आईडी पास करें. क्यू में बदलाव होने पर, आपको setActiveQueueItemId अपडेट करना होगा.

Android Auto और 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 से जुड़ा है. इन कॉन्स्टैंट को बंडल में कुंजियों के तौर पर इस्तेमाल करें. साथ ही, वैल्यू के तौर पर बूलियन true का इस्तेमाल करें.

शुरुआती PlaybackState सेट करना

Android Auto और AAOS, आपकी मीडिया ब्राउज़र सेवा से कम्यूनिकेट करते हैं. वहीं, आपका मीडिया सेशन, कॉन्टेंट के प्लेबैक की स्थिति की जानकारी देता है.PlaybackStateCompat

जब AAOS या Android Auto, आपकी मीडिया ब्राउज़र सेवा से कनेक्ट होते हैं, तो आपका ऐप्लिकेशन अपने-आप संगीत नहीं चलाएगा. इसके बजाय, Android Auto और AAOS पर भरोसा करें, ताकि वे कार की स्थिति या उपयोगकर्ता की कार्रवाइयों के आधार पर, प्लेबैक फिर से शुरू कर सकें या शुरू कर सकें.

इसके लिए, अपने मीडिया सेशन के शुरुआती PlaybackStateCompat को STATE_STOPPED, STATE_PAUSED, STATE_NONE या STATE_ERROR पर सेट करें.

Android Auto और AAOS में मीडिया सेशन, सिर्फ़ गाड़ी चलाने के दौरान चलते हैं. इसलिए, उपयोगकर्ता इन सेशन को अक्सर शुरू और बंद करते हैं. गाड़ी चलाने के दौरान, बेहतर अनुभव देने के लिए, उपयोगकर्ता के पिछले सेशन की स्थिति ट्रैक करें. इससे, जब मीडिया ऐप्लिकेशन को फिर से शुरू करने का अनुरोध मिलता है, तो उपयोगकर्ता अपने-आप वहीं से शुरू कर सकता है जहां उसने छोड़ा था. उदाहरण के लिए, पिछली बार चलाया गया मीडिया आइटम, PlaybackStateCompat, और क्यू.

प्लेबैक की कस्टम कार्रवाइयां जोड़ना

प्लेबैक की कस्टम कार्रवाइयां जोड़ी जा सकती हैं, ताकि आपके मीडिया ऐप्लिकेशन की अन्य कार्रवाइयां दिखाई जा सकें. अगर जगह उपलब्ध है (और आपने उसे रिज़र्व नहीं किया है), तो Android ट्रांसपोर्ट कंट्रोल में कस्टम कार्रवाइयां जोड़ता है. इसके अलावा, कस्टम कार्रवाइयां ज़्यादा मेन्यू में दिखती हैं. Android, PlaybackStateCompat में जोड़ी गई कस्टम कार्रवाइयों को उसी क्रम में दिखाता है.

स्टैंडर्ड कार्रवाइयों से अलग व्यवहार दिखाने के लिए, कस्टम कार्रवाइयों का इस्तेमाल करें. इनका इस्तेमाल, स्टैंडर्ड कार्रवाइयों को बदलने या डुप्लीकेट करने के लिए न करें.

कस्टम कार्रवाइयां जोड़ने के लिए, addCustomAction तरीके का इस्तेमाल PlaybackStateCompat.Builder क्लास में करें. इस कोड स्निपेट में, "रेडियो चैनल शुरू करें" के लिए कस्टम कार्रवाई जोड़ने का तरीका बताया गया है:

Kotlin

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

Java

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 पर Universal Android Music Player के सैंपल ऐप्लिकेशन में, setCustomAction तरीका देखें. कस्टम कार्रवाई बनाने के बाद, आपका मीडिया सेशन, कार्रवाइयों का जवाब दे सकता है onCustomAction तरीके को बदलकर.

इस कोड स्निपेट में, "रेडियो चैनल शुरू करें" कार्रवाई का जवाब देने का तरीका बताया गया है:

Kotlin

override fun onCustomAction(action: String, extras: Bundle?) {
    when(action) {
        CUSTOM_ACTION_START_RADIO_FROM_MEDIA -> {
            ...
        }
    }
}

Java

@Override
public void onCustomAction(@NonNull String action, Bundle extras) {
    if (CUSTOM_ACTION_START_RADIO_FROM_MEDIA.equals(action)) {
        ...
    }
}

ज़्यादा जानने के लिए, GitHub पर Universal Android Music Player के सैंपल ऐप्लिकेशन में, onCustomAction तरीका देखें.

कस्टम कार्रवाइयों के लिए आइकॉन बनाना

आपके बनाए गए हर कस्टम ऐक्शन के लिए, एक आइकॉन की ज़रूरत होती है.

अगर उस आइकॉन का ब्यौरा, CommandButton.ICON_ कॉन्स्टैंट से मेल खाता है, तो कस्टम कार्रवाई के एक्स्ट्रा में मौजूद EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT कुंजी के लिए, इंटिजर वैल्यू सेट करें. सहायता देने वाले सिस्टम पर, ऐसा करने से CustomAction.Builder को पास किया गया आइकॉन रिसॉर्स बदल जाता है. इससे, सिस्टम के कॉम्पोनेंट, आपकी कार्रवाई और प्लेबैक की अन्य कार्रवाइयों को एक जैसा रेंडर कर पाते हैं.

आपको आइकॉन रिसॉर्स भी तय करना होगा. कार में मौजूद ऐप्लिकेशन, अलग-अलग स्क्रीन साइज़ और डेंसिटी पर चल सकते हैं. इसलिए, आपके दिए गए आइकॉन, वेक्टर ड्रॉएबल होने चाहिए. डिटेल में कोई बदलाव किए बिना, ऐसेट को स्केल करने के लिए, वेक्टर ड्रॉएबल का इस्तेमाल करें. वेक्टर ड्रॉएबल, कम रिज़ॉल्यूशन पर पिक्सल की सीमाओं के हिसाब से, किनारों और कोनों को अलाइन कर सकता है.

अगर कोई कस्टम कार्रवाई स्टेटफ़ुल है (अगर यह प्लेबैक सेटिंग को टॉगल करके चालू या बंद करती है), तो अलग-अलग स्थितियों के लिए अलग-अलग आइकॉन दें. इससे, उपयोगकर्ता को कार्रवाई चुनने पर बदलाव दिखेगा.

बंद की गई कार्रवाइयों के लिए, आइकॉन के अन्य स्टाइल देना

जब मौजूदा कॉन्टेक्स्ट के लिए कोई कस्टम कार्रवाई उपलब्ध नहीं होती है, तो कस्टम कार्रवाई के आइकॉन को किसी ऐसे आइकॉन से बदलें जो कार्रवाई को बंद के तौर पर दिखाता हो.

स्टाइल से अलग कस्टम ऐक्शन आइकॉन के सैंपल.
पहली इमेज. बंद की गई कस्टम कार्रवाई के आइकॉन के सैंपल.

ऑडियो फ़ॉर्मैट की जानकारी देना

यह बताने के लिए कि चल रहे मीडिया में, ऑडियो का कोई खास फ़ॉर्मैट इस्तेमाल किया गया है, आइकॉन तय किए जा सकते हैं. ये आइकॉन, इस सुविधा के लिए सहायता देने वाली कारों में रेंडर किए जाते हैं. फ़िलहाल चल रहे मीडिया आइटम के एक्स्ट्रा बंडल में, KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI और KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI सेट किए जा सकते हैं. यह बंडल, MediaSession.setMetadata को पास किया जाता है. अलग-अलग लेआउट के लिए, दोनों एक्स्ट्रा सेट करें.

इसके अलावा, KEY_IMMERSIVE_AUDIO एक्स्ट्रा सेट किया जा सकता है, ताकि कार बनाने वाली कंपनियों को बताया जा सके कि यह इमर्सिव ऑडियो है. साथ ही, उन्हें यह तय करते समय बहुत सावधानी बरतनी चाहिए कि ऑडियो इफ़ेक्ट लागू करने हैं या नहीं. ऐसा इसलिए, क्योंकि ये इफ़ेक्ट, इमर्सिव कॉन्टेंट में रुकावट डाल सकते हैं.

चल रहे मीडिया आइटम को इस तरह कॉन्फ़िगर किया जा सकता है कि उसका सबटाइटल, ब्यौरा या दोनों, अन्य मीडिया आइटम के लिंक हों. इससे उपयोगकर्ता, मिलते-जुलते आइटम पर तुरंत जा सकता है. उदाहरण के लिए, वह एक ही कलाकार के अन्य गाने या पॉडकास्ट के अन्य एपिसोड पर जा सकता है. अगर कार में यह सुविधा उपलब्ध है, तो उपयोगकर्ता उस कॉन्टेंट को ब्राउज़ करने के लिए, लिंक पर टैप कर सकते हैं.

लिंक जोड़ने के लिए, KEY_SUBTITLE_LINK_MEDIA_ID मेटाडेटा (सबटाइटल से लिंक करने के लिए) या KEY_DESCRIPTION_LINK_MEDIA_ID (ब्यौरे से लिंक करने के लिए) कॉन्फ़िगर करें. ज़्यादा जानकारी के लिए, उन मेटाडेटा फ़ील्ड के रेफ़रंस दस्तावेज़ देखें.