मीडिया सेशन का इस्तेमाल करना

मीडिया सेशन, ऑडियो या वीडियो के साथ इंटरैक्ट करने का एक यूनिवर्सल तरीका देते हैं प्लेयर. किसी ऐप्लिकेशन में मीडिया चलने पर Android को सूचना देकर, ऐप्लिकेशन को कंट्रोल दिए जा सकते हैं. मीडिया सेशन के साथ इंटिग्रेट करने पर, आपको मीडिया प्लेबैक का विज्ञापन देने और प्लेबैक निर्देश पाने के लिए ऐप्लिकेशन को बाहर रखा जा सकता है. ये सोर्स, फ़िज़िकल बटन हो सकते हैं, जैसे कि प्ले पर क्लिक या टैप करें. "रोको" निर्देश दे रहा है मदद मिलती है). इसके बाद, मीडिया सेशन इन ऐप्लिकेशन को दिए जाने वाले आदेश जो उन्हें उस मीडिया प्लेयर पर लागू करते हैं जिसके लिए वह जहां से कमांड जनरेट होते हैं.

मीडिया सेशन उस प्लेयर के साथ होता है जिसे वह मैनेज करता है. आपको बनाना चाहिए और गतिविधि के onCreate() तरीके में मीडिया सेशन शुरू करें या मीडिया सेशन और उससे जुड़े प्लेयर का मालिकाना हक रखने वाली सेवा.

मीडिया सेशन शुरू करें

नए बनाए गए मीडिया सेशन में, कोई सुविधा मौजूद नहीं होती है. सेशन शुरू करने के लिए, यह तरीका अपनाएं:

  • फ़्लैग सेट करें, ताकि मीडिया सेशन को मीडिया कंट्रोलर और मीडिया बटन से कॉलबैक मिल सकें.
  • PlaybackStateCompat का एक इंस्टेंस बनाएं और उसे शुरू करें और उसे सेशन के लिए असाइन करें. वीडियो चलाने की स्थिति पूरे सेशन के दौरान बदलती रहती है. इसलिए, हमारा सुझाव है कि आप PlaybackStateCompat.Builder को कैश मेमोरी में सेव कर लें, ताकि उसे दोबारा इस्तेमाल किया जा सके.
  • MediaSessionCompat.Callback का एक इंस्टेंस बनाएं और उसे सेशन में असाइन करें. इसके बारे में ज़्यादा जानकारी नीचे कॉलबैक के बारे में दी गई है.

आपको मीडिया सेशन बनाने और उसे शुरू करने के लिए, इस तरीके का onCreate() तरीका अपनाना चाहिए गतिविधि या सेवा है, जिसके पास सेशन का मालिकाना हक है.

इससे मीडिया बटन काम करते हैं जब आपका ऐप्लिकेशन हाल ही में शुरू या बंद किया गया हो, तो उसका PlaybackState होना चाहिए मीडिया बटन से भेजे जाने वाले इंटेंट से मेल खाने वाली चलाने की कार्रवाई शामिल होनी चाहिए. यह है ACTION_PLAY को सेशन की स्थिति के लिए क्यों असाइन किया गया है शुरू करना. ज़्यादा जानकारी के लिए, मीडिया पर प्रतिक्रिया देना बटन.

वीडियो चलाने की स्थिति और मेटाडेटा को बनाए रखना

मीडिया सेशन की स्थिति को दो क्लास से दिखाया जाता है.

कॉन्टेंट बनाने PlaybackStateCompat अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है क्लास, प्लेयर की मौजूदा ऑपरेशन स्थिति के बारे में बताती है. इसमें ये शामिल हैं:

  • ट्रांसपोर्ट की स्थिति (प्लेयर चल रहा है/रोका जा रहा है/बफ़रिंग हो रही है या नहीं वगैरह. getState() देखें)
  • लागू होने पर, गड़बड़ी का कोड और गड़बड़ी का वैकल्पिक मैसेज. (getErrorCode() देखें और नीचे राज्य और गड़बड़ियां पढ़ें.)
  • खिलाड़ी की स्थिति
  • कंट्रोलर की ऐसी मान्य कार्रवाइयां जिन्हें मौजूदा स्थिति में मैनेज किया जा सकता है

MediaMetadataCompat क्लास में चल रही सामग्री के बारे में जानकारी दी जाती है:

  • कलाकार, एल्बम, और ट्रैक का नाम
  • ट्रैक की अवधि
  • लॉक स्क्रीन पर दिखाने के लिए एल्बम का आर्टवर्क. यह इमेज एक बिट मैप है, जिसका साइज़ ज़्यादा से ज़्यादा 320x320dp है (अगर इससे बड़ी है, तो इसे छोटा किया जाता है).
  • ContentUris का एक इंस्टेंस, जो आर्टवर्क के बड़े वर्शन के बारे में बताता है

मीडिया सेशन के चलने के दौरान प्लेयर की स्थिति और मेटाडेटा बदल सकता है. हर बार स्थिति या मेटाडेटा बदलने पर, आपको हर क्लास PlaybackStateCompat.Builder() या MediaMetadataCompat.Builder() के लिए संबंधित बिल्डर का इस्तेमाल करना होगा. इसके बाद, कॉल करके मीडिया सेशन में नया इंस्टेंस भेजना होगा setPlaybackState() या setMetaData(). बार-बार की जाने वाली इन कार्रवाइयों से मेमोरी की खपत को कम करने के लिए, यह अच्छा आइडिया है कि बिल्डर बनाएं और पूरे सेशन के दौरान इनका फिर से इस्तेमाल करें.

स्थितियां और गड़बड़ियां

ध्यान दें कि PlaybackState एक ऐसा ऑब्जेक्ट है जिसमें सेशन के वीडियो चलाने की स्थिति (getState()) और ज़रूरत पड़ने पर, उससे जुड़ा गड़बड़ी कोड (getErrorCode()). गड़बड़ियां गंभीर या गंभीर हो सकती हैं:

जब भी प्लेबैक में रुकावट आती है, तो आपको गंभीर गड़बड़ी जनरेट करनी चाहिए: STATE_ERROR पर ट्रांसपोर्ट स्टेट और setErrorMessage(int, CharSequence) से जुड़ी कोई गड़बड़ी बताएं. जब तक इस गड़बड़ी की वजह से वीडियो चलाने की सुविधा पर रोक लगी रहती है, तब तक PlaybackState को जारी रखना चाहिए STATE_ERROR और गड़बड़ी की शिकायत करने के लिए.

एक साधारण गड़बड़ी तब होती है, जब आपका ऐप्लिकेशन किसी अनुरोध को हैंडल नहीं कर पाता, लेकिन चलना जारी रख सकता है: परिवहन "सामान्य" स्थिति में बना रहता है स्थिति (जैसे कि STATE_PLAYING) होती है, लेकिन PlaybackState में एक गड़बड़ी कोड होता है. उदाहरण के लिए, अगर पिछला गाना चल रहा है और उपयोगकर्ता अगले गाने पर जाने का अनुरोध करता है, प्लेबैक जारी रह सकता है, लेकिन आपको गड़बड़ी कोड ERROR_CODE_END_OF_QUEUE के साथ एक नया PlaybackState बनाना चाहिए और इसके बाद, setPlaybackState() पर कॉल करें. सेशन से अटैच किए गए मीडिया कंट्रोलर को कॉलबैक मिलेगा onPlaybackStateChanged() और उपयोगकर्ता को बताएं कि क्या हुआ. किसी सामान्य गड़बड़ी की शिकायत होने के समय, सिर्फ़ एक बार की जानी चाहिए. अगली बार जब सेशन अपडेट होता है, तो PlaybackState पहले जैसी सामान्य गड़बड़ी को फिर से सेट नहीं करता. ऐसा तब तक नहीं किया जाता, जब तक नए अनुरोध के जवाब में गड़बड़ी न हुई हो.

मीडिया सेशन के लिए लॉक स्क्रीन

Android 4.0 (एपीआई लेवल 14) के बाद वाले वर्शन में, सिस्टम किसी मीडिया सेशन के वीडियो चलाने की स्थिति और मेटाडेटा. लॉक स्क्रीन पर, मीडिया कंट्रोल इस तरह दिखेंगे और आर्टवर्क. यह व्यवहार इस आधार पर अलग-अलग होता है कि Android वर्शन.

एल्बम आर्टवर्क

Android 4.0 (एपीआई लेवल 14) से Android 10 (एपीआई लेवल 29) तक के वर्शन में, बैकग्राउंड आपके एल्बम का आर्टवर्क दिखाती है. ऐसा सिर्फ़ तब होता है, जब मीडिया सेशन मेटाडेटा में एक पृष्ठभूमि बिटमैप शामिल है.

ट्रांसपोर्ट कंट्रोल

Android 4.0 (एपीआई लेवल 14) से लेकर Android 4.4 (एपीआई लेवल 19) तक के वर्शन में, जब मीडिया सेशन चालू हो और मीडिया सेशन के मेटाडेटा में बैकग्राउंड बिटमैप शामिल हो, तो लॉक स्क्रीन पर ट्रांसपोर्ट कंट्रोल अपने-आप दिखते हैं.

Android 5.0 (एपीआई लेवल 21) या उसके बाद के वर्शन में, सिस्टम ट्रांसपोर्ट की सुविधा नहीं देता लॉक स्क्रीन पर कंट्रोल कर सकते हैं. इसके बजाय, आपको MediaStyle का इस्तेमाल करना चाहिए सूचना ट्रांसपोर्ट कंट्रोल दिखाने के लिए.

कस्टम कार्रवाइयां जोड़ें

मीडिया ऐप्लिकेशन कस्टम कार्रवाइयां तय कर सकते हैं; उदाहरण के लिए: पसंदीदा, पसंद या 30 सेकंड पीछे ले जाओ. कस्टम कार्रवाई को पूरी तरह से नया व्यवहार लागू करना चाहिए. ऐसा करें किसी स्टैंडर्ड ट्रांसपोर्ट कंट्रोल ऐक्शन को बदलने के लिए, कस्टम ऐक्शन का इस्तेमाल न करें इसमें परिभाषित किया गया है PLAYStateCompat.

addCustomAction() के साथ कस्टम ऐक्शन जोड़ें. नीचे दिए गए उदाहरण में, 'पसंदीदा' कार्रवाई के लिए कंट्रोल जोड़ने का तरीका बताया गया है:

Kotlin

stateBuilder.addCustomAction(
        PlaybackStateCompat.CustomAction.Builder(
                CUSTOM_ACTION_THUMBS_UP,
                resources.getString(R.string.thumbs_up),
                thumbsUpIcon
        ).run {
            setExtras(customActionExtras)
            build()
        }
)

Java

stateBuilder.addCustomAction(new PlaybackStateCompat.CustomAction.Builder(
    CUSTOM_ACTION_THUMBS_UP, resources.getString(R.string.thumbs_up), thumbsUpIcon)
    .setExtras(customActionExtras)
    .build());

पूरे उदाहरण के लिए यूनिवर्सल म्यूज़िक प्लेयर देखें.

जवाब देने के लिए, onCustomAction() का इस्तेमाल करें.

Kotlin

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

Java

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

यूनिवर्सल म्यूज़िक प्लेयर भी देखें.

मीडिया सेशन के कॉलबैक

मुख्य मीडिया सेशन के कॉलबैक के तरीके onPlay(), onPause(), और onStop() हैं. यहां, प्लेयर को कंट्रोल करने वाला कोड जोड़ा जाता है.

रनटाइम (onCreate() में) पर सेशन के कॉलबैक को इंस्टैंशिएट और सेट किया जाता है, इसलिए आपका ऐप्लिकेशन ऐसे वैकल्पिक कॉलबैक तय कर सकता है जो अलग-अलग प्लेयर का इस्तेमाल करते हैं. साथ ही, डिवाइस और/या सिस्टम के लेवल के आधार पर, कॉलबैक/प्लेयर का सही कॉम्बिनेशन चुना जा सकता है. ऐप्लिकेशन के बाकी हिस्सों में बदलाव किए बिना, प्लेयर को बदला जा सकता है. उदाहरण के लिए, Android 4.1 (एपीआई लेवल 16) या इसके बाद के वर्शन पर चलाते समय, ExoPlayer का इस्तेमाल किया जा सकता है. साथ ही, इससे पहले के सिस्टम पर MediaPlayer का इस्तेमाल किया जा सकता है.

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

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