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

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 (जानकारी से लिंक करने के लिए) कॉन्फ़िगर करें. ज़्यादा जानकारी के लिए, उन मेटाडेटा फ़ील्ड के लिए रेफ़रंस दस्तावेज़ देखें.