MediaSession — کلیدی تصورات، انضمام اور Android میں کام کرنے کا طریقہ کار

مصنف: IT Sectr اشاعت: 2026-05-23 مطالعے کا وقت: 8 منٹ

MediaSession میڈیا مواد کے پلے بیک کو منظم کرنے اور بیرونی آلات کے ساتھ انضمام کے لیے Android فریم ورک کا ایک جزو ہے۔ یہ Bluetooth ہیڈسیٹ، ہیڈفون، Android Auto اور سسٹم میڈیا سینٹر کے ساتھ تعامل کے لیے ایک متحد انٹرفیس فراہم کرتا ہے۔ Android Developers Guide, 2026 کے مطابق، MediaSession متروک RemoteControlClient کی جگہ لیتا ہے اور ان پلیئرز کے لیے لازمی ہے جو سسٹم کے ساتھ ہم آہنگ ہوتے ہیں۔

اہم نکات

  • MediaSession Android میں میڈیا اسٹریمز کو منظم کرنے کا مرکزی جزو ہے، جو بیرونی ذرائع سے کمانڈز وصول کرتا ہے۔
  • یہ Bluetooth AVRCP، ہیڈسیٹ، Android Auto، پہننے کے قابل آلات اور Android میڈیا سینٹر کو سپورٹ کرتا ہے۔
  • سیشن پلیئر کی حالت (play/pause/next/previous) اور میٹا ڈیٹا (عنوان، فنکار، کور آرٹ) کو سسٹم کے ساتھ ہم آہنگ کرتا ہے۔
  • اس کے لیے AndroidX سے MediaSessionCompat درکار ہے، جو API 14 تک پسماندہ مطابقت فراہم کرتا ہے۔
  • MediaSession.Callback سسٹم آنے والی کمانڈز پر کارروائی کرتا ہے اور MediaSession کی حالت تبدیل کرتا ہے۔

MediaSession کیا ہے؟

MediaSession Android میں ایک سسٹم جزو ہے جو ایپ کو اپنی میڈیا سرگرمی کا اعلان کرنے اور بیرونی ذرائع سے کنٹرول کمانڈز وصول کرنے کی اجازت دیتا ہے۔ جب صارف Bluetooth ہیڈسیٹ پر Play بٹن دباتا ہے، سسٹم اس ایونٹ کو فعال MediaSession کو بھیجتا ہے، اور ایپ اپنے Callback کے ذریعے جواب دیتی ہے۔

Android 5.0 سے پہلے، اس مقصد کے لیے RemoteControlClient استعمال ہوتا تھا، لیکن یہ کافی لچک فراہم نہیں کرتا تھا اور جدید منظرناموں — Android Auto، سمارٹ واچز، سمارٹ اسپیکرز — کو سپورٹ نہیں کرتا تھا۔ MediaSession کو API 21 میں متعارف کرایا گیا اور آڈیو اور ویڈیو پلے بیک والی تمام Android ایپس کے لیے حقیقی معیار بن گیا۔

Android ڈویلپر دستاویزات (2026) کے مطابق، ایک ایپ کو ہر آزاد پلے بیک ماخذ کے لیے ایک MediaSession بنانا چاہیے۔ کسی بھی وقت صرف ایک سیشن فعال ہو سکتا ہے — کوئی بھی نیا سیشن خود بخود پچھلے سیشن کو غیر فعال کر دیتا ہے۔

MediaSession اور MediaBrowserService

MediaSession کا MediaBrowserService کے ساتھ امتزاج میڈیا مینجمنٹ کا ایک مکمل چکر فراہم کرتا ہے: سروس ایک مواد کا درخت (پلے لسٹس، کیٹلاگ) فراہم کرتی ہے، اور سیشن نیویگیشن اور پلے بیک کمانڈز قبول کرتا ہے۔ یہ Google کی طرف سے میوزک پلیئرز، پوڈکاسٹس اور آڈیو بکس کے لیے تجویز کردہ آرکیٹیکچر ہے۔

MediaBrowserService ایک اطلاع کے ساتھ پیش منظر کی خدمت کے طور پر چلتا ہے، جو Activity کے تباہ ہونے پر بھی ایپ کے کام جاری رکھنے کو یقینی بناتا ہے۔ یہ آڈیو پلیئرز کے لیے اہم ہے جنہیں ایپ کے چھوٹا ہونے پر بھی چلتے رہنا چاہیے۔

MediaSession کیسے کام کرتا ہے

سیشن دو قسم کے تعامل کی حمایت کرتا ہے: یہ MediaController (کلائنٹ سائیڈ) سے کمانڈز وصول کرتا ہے اور PlaybackState کے ذریعے حالت نشر کرتا ہے۔ MediaController ایک ہی عمل میں یا کسی علیحدہ ایپ میں ہو سکتا ہے — سسٹم SessionToken کے ذریعے درخواستوں کو روٹ کرتا ہے۔

جب صارف Android آواز اسسٹنٹ کو کال کرتا ہے اور “اگلا ٹریک چلائیں” کہتا ہے، سسٹم MediaBrowserService سے کنکشن کے ذریعے فعال MediaSession ڈھونڈتا ہے اور ACTION_SKIP_TO_NEXT کمانڈ بھیجتا ہے۔ ایپ کا Callback onSkipToNext() کال وصول کرتا ہے اور PlaybackState کو اپ ڈیٹ کرتا ہے۔

setPlaybackState() کے ذریعے PlaybackState کو اپ ڈیٹ کرنا تمام منسلک MediaController مثالوں کو فوری طور پر مطلع کرتا ہے۔ سسٹم میڈیا سینٹر، Bluetooth ڈیوائس اور Android Auto بیک وقت اپ ڈیٹ وصول کرتے ہیں — عام حالات میں تاخیر 50 ms سے زیادہ نہیں ہوتی۔

PlaybackState اور اس کا میٹا ڈیٹا

PlaybackState میں اہم حالت کے جھنڈے ہوتے ہیں: isPlaying، مقام، رفتار، دستیاب اقدامات (play, pause, seek, stop)۔ مناسب طریقے سے بھرے ہوئے PlaybackState کے بغیر، سسٹم نہیں جانتا کہ ایپ کون سی کمانڈز سپورٹ کرتی ہے اور متعلقہ واقعات نہیں بھیجتا۔

میٹا ڈیٹا (MediaMetadata) موجودہ ٹریک کے بارے میں معلومات — عنوان، فنکار، البم آرٹ URI — کے ساتھ حالت کو مکمل کرتا ہے۔ Android Auto اور پہننے کے قابل آلات اسکرین پر معلومات ظاہر کرنے کے لیے MediaMetadata استعمال کرتے ہیں۔ Google I/O 2024 کے مطابق، MediaMetadata کو صحیح طریقے سے بھرنا تیسرے فریق لانچرز میں ایپ کی مرئیت کو 40% بڑھاتا ہے۔

MediaSession کے اہم اجزاء

MediaSession آرکیٹیکچر چار باہم جڑے ہوئے اجزاء پر مشتمل ہے، ہر ایک کا اپنا کردار ہے۔ مکمل سسٹم انضمام کے لیے ڈویلپر کو چاروں کو نافذ کرنا ہوگا۔

  • MediaSessionCompat — سیشن کی مرکزی کلاس، ایپ ٹیگ کے ساتھ بنائی جاتی ہے اور میڈیا بٹنوں کے لیے PendingIntent قبول کرتی ہے۔
  • MediaSession.Callback — کمانڈ ہینڈلر۔ onPlay، onPause، onSkipToNext، onSeekTo اور دیگر طریقوں کو نافذ کرتا ہے۔
  • PlaybackStateCompat — موجودہ پلیئر کی حالت۔ جھنڈے، مقام، رفتار اور دستیاب اقدامات کی فہرست پر مشتمل ہے۔
  • MediaMetadataCompat — موجودہ میڈیا کا میٹا ڈیٹا: عنوان، فنکار، البم، کور آرٹ، دورانیہ۔

MediaSession کی زندگی کا چکر

سیشن کسی سروس یا Activity کے onCreate طریقہ میں MediaSessionCompat(context, tag) کال کرکے بنایا جاتا ہے۔ تخلیق کے بعد، setFlags(FLAG_HANDLES_MEDIA_BUTTONS | FLAG_HANDLES_TRANSPORT_CONTROLS) کال کرنا ضروری ہے۔ onDestroy میں، سسٹم وسائل کو آزاد کرنے کے لیے release() کال کیا جاتا ہے۔

زندگی کے چکر کا غلط انتظام عام غلطیوں میں سے ایک ہے۔ اگر release() نہیں بلایا جاتا، سیشن سسٹم میں رہتا ہے اور اگلی ایپ کو پرانی حالت مل سکتی ہے۔ Android 13+ سیشن لیک پر Logcat انتباہ دکھاتا ہے۔

ایپلیکیشن میں MediaSession کا انضمام

بنیادی انضمام ایک سیشن بنانے اور Callback نافذ کرنے سے شروع ہوتا ہے۔ AndroidX میڈیا لائبریری سے MediaSessionCompat استعمال کرنے کی سفارش کی جاتی ہے، جو Android کے تمام ورژنز — API 14 سے 35 — کے لیے ایک متحد API فراہم کرتی ہے۔

MediaSession اور Callback بنانا

kotlin
class MusicService : Service() {

    private lateinit var mediaSession: MediaSessionCompat
    private lateinit var stateBuilder: PlaybackStateCompat.Builder

    override fun onCreate() {
        super.onCreate()

        mediaSession = MediaSessionCompat(this, "MusicService")
        mediaSession.setFlags(
            MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
                or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS
        )
        mediaSession.setCallback(MediaSessionCallback())
        updatePlaybackState(false)
    }

    private inner class MediaSessionCallback : MediaSessionCompat.Callback() {
        override fun onPlay() {
            updatePlaybackState(true)
        }

        override fun onPause() {
            updatePlaybackState(false)
        }
    }

    private fun updatePlaybackState(isPlaying: Boolean) {
        stateBuilder = PlaybackStateCompat.Builder()
            .setState(
                if (isPlaying) PlaybackStateCompat.STATE_PLAYING
                else PlaybackStateCompat.STATE_PAUSED,
                AudioTrackCompat.CURRENT_POSITION_NOT_SET,
                1.0f
            )
            .setActions(
                PlaybackStateCompat.ACTION_PLAY
                    or PlaybackStateCompat.ACTION_PAUSE
                    or PlaybackStateCompat.ACTION_SKIP_TO_NEXT
                    or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
            )
        mediaSession.setPlaybackState(stateBuilder.build())
    }

    override fun onDestroy() {
        mediaSession.release()
        super.onDestroy()
    }
}

اس مثال میں، MusicService ٹیگ اور میڈیا بٹنوں کو ہینڈل کرنے کے لیے جھنڈوں کے ساتھ ایک MediaSession بنایا گیا ہے۔ Callback onPlay اور onPause کو نافذ کرتا ہے، PlaybackState کو اپ ڈیٹ کرتا ہے۔ setActions طریقہ دستیاب اقدامات کا اعلان کرتا ہے جو سسٹم لاک اسکرین اور میڈیا سینٹر پر دکھاتا ہے۔

MediaMetadata ترتیب دینا

kotlin
private fun setMetadata(title: String, artist: String) {
    val metadata = MediaMetadataCompat.Builder()
        .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title)
        .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
        .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 300000L)
        .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, albumArtUrl)
        .build()
    mediaSession.setMetadata(metadata)
}

میٹا ڈیٹا کو ہر ٹریک تبدیلی پر اپ ڈیٹ کیا جانا چاہیے۔ سسٹم METADATA_KEY_TITLE اور METADATA_KEY_ARTIST کا استعمال کرتا ہے کاروں کے Bluetooth ڈسپلے اور پہننے کے قابل آلات پر معلومات دکھانے کے لیے۔ اگر کور آرٹ URI سیٹ نہیں کیا جاتا، پلیئر ایک سرمئی پلیس ہولڈر دکھائے گا۔

Bluetooth اور ہیڈفونز سے میڈیا کمانڈز کو ہینڈل کرنا

Bluetooth ہیڈسیٹ AVRCP 1.6+ پروفائل کے ذریعے کمانڈز بھیجتے ہیں۔ Android ان کمانڈز کو ACTION_MEDIA_BUTTON انٹینٹ کے طور پر نشر کرتا ہے، جو FLAG_HANDLES_MEDIA_BUTTONS جھنڈا سیٹ ہونے پر MediaSession کے ذریعے روک لی جاتی ہیں۔

جب صارف Bluetooth ہیڈفون پر Play بٹن دباتا ہے، سسٹم KEYCODE_MEDIA_PLAY کوڈ کے ساتھ ایک KeyEvent بناتا ہے، جو Callback کے onMediaButtonEvent طریقہ کو بھیجا جاتا ہے۔ اگر Callback میں onPlay() نافذ ہے، سسٹم اسے براہ راست کال کرتا ہے۔ ہیڈسیٹ بٹن کے ایک بار دبانے سے KEYCODE_MEDIA_PLAY_PAUSE بھیجا جاتا ہے — پلیئر کو حالت تبدیل کرنی چاہیے۔

متعدد بٹنوں کے ساتھ پیچیدہ منظرناموں کو ہینڈل کرنا

جدید Bluetooth ہیڈفون میں 5 تک بٹن ہو سکتے ہیں: والیوم +/-, play/pause, next, previous۔ ہر بٹن اپنا KeyEvent پیدا کرتا ہے، جسے Callback کے ذریعے صحیح طریقے سے ہینڈل کیا جانا چاہیے۔ بہت سے ہیڈسیٹ پر play/pause کا ڈبل پریس عام طور پر اگلے ٹریک (ACTION_SKIP_TO_NEXT) پر جانے کے طور پر تشریح کیا جاتا ہے۔

Android مطابقت تعریف دستاویز (2026) کے مطابق، میڈیا مواد والی تمام ایپس کو KEYCODE_MEDIA_PLAY_PAUSE کو صحیح طریقے سے ہینڈل کرنا چاہیے۔ اس ضرورت کو نظر انداز کرنا Google Play میں موسیقی اور آڈیو زمرہ کے لیے ایپ کی درجہ بندی میں خودکار کمی کا باعث بنتا ہے۔

سسٹم میڈیا سینٹر کے ساتھ ہم آہنگی

Android 11 سے شروع کرتے ہوئے، سسٹم میڈیا سینٹر (میڈیا کنٹرول پینل) اطلاعی شیڈ میں 5 حالیہ MediaSession سیشنز تک دکھاتا ہے۔ صارف ایپ کھولے بغیر پلیئر کو کنٹرول کر سکتا ہے۔ درست نمائش کے لیے MediaBrowserService کو نافذ کرنا اور PlaybackState کو صحیح طریقے سے بھرنا ضروری ہے۔

میڈیا کنٹرول پینل دکھاتا ہے: ٹریک کا عنوان، فنکار، کور آرٹ (MediaMetadata سے)، کنٹرول بٹن (PlaybackState کے دستیاب اقدامات سے)۔ اگر ایپ فعال پلے بیک کے دوران ہر 10 سیکنڈ میں کم از کم ایک بار PlaybackState اپ ڈیٹ نہیں کرتی، میڈیا سینٹر سیشن کو پینل سے چھپا دیتا ہے۔

اطلاع کے ساتھ پیش منظر کی خدمت

kotlin
private fun startForegroundService() {
    val notification = NotificationCompat.Builder(this, "media_channel")
        .setSmallIcon(R.drawable.ic_play)
        .setContentTitle("اب چل رہا ہے")
        .setContentText(currentTrackTitle)
        .setPriority(NotificationCompat.PRIORITY_LOW)
        .setStyle(
            androidx.media.app.NotificationCompat.MediaStyle()
                .setMediaSession(mediaSession.sessionToken)
        )
        .build()
    startForeground(1001, notification)
}

MediaStyle اطلاع sessionToken کے ذریعے MediaSession سے منسلک ہوتی ہے اور معیاری میڈیا بٹن دکھاتی ہے۔ MediaStyle کے بغیر، اطلاع کنٹرول بٹنوں کے بغیر عام انتباہ کے طور پر ظاہر ہوگی۔ Android 13+ نمائش کے لیے واضح POST_NOTIFICATIONS اجازت درکار ہے۔

اکثر پوچھے گئے سوالات

کیا ایک ایپ میں ایک وقت میں کئی فعال MediaSession ہو سکتے ہیں؟

تکنیکی طور پر ہاں، لیکن کسی بھی وقت صرف ایک سیشن فعال سمجھا جاتا ہے۔ setActive(true) کال کیے بغیر نیا سیشن بنانے پر، پچھلا سیشن فعال رہتا ہے۔ ایپ کے لیے ایک سیشن یا فعال حالت کی تبدیلی کے ساتھ ہر آزاد آڈیو ماخذ کے لیے ایک سیشن رکھنے کی سفارش کی جاتی ہے۔

MediaSession Audio Focus کے ساتھ کیسے تعامل کرتا ہے؟

MediaSession Audio Focus کو خود بخود منظم نہیں کرتا — یہ ایک الگ طریقہ کار ہے۔ onPlay کمانڈ وصول کرنے پر، ڈویلپر کو آزادانہ طور پر AudioManager کے ذریعے AudioFocus کی درخواست کرنی ہوتی ہے، اور فوکس کھونے پر سیشن کے ذریعے پلے بیک روکنا ہوتا ہے۔

میری ایپ کے ساتھ ہیڈفون کے میڈیا بٹن کیوں کام نہیں کرتے؟

چیک کریں کہ FLAG_HANDLES_MEDIA_BUTTONS اور FLAG_HANDLES_TRANSPORT_CONTROLS جھنڈے سیٹ ہیں۔ نیز یقینی بنائیں کہ سیشن فعال ہے (setActive(true))۔ Android 12+ پر، میڈیا بٹن صرف MediaSession کے ذریعے کام کرتے ہیں — پرانا registerMediaButtonEventReceiver تعاون یافتہ نہیں ہے۔

کیا MediaSession کے کام کرنے کے لیے MediaBrowserService ضروری ہے؟

بنیادی بٹن ہینڈلنگ کے لیے — نہیں۔ لیکن Android Auto، Wear OS اور سسٹم میڈیا سینٹر کے ساتھ انضمام کے لیے MediaBrowserService ضروری ہے۔ Google طویل آڈیو پلے بیک والی تمام ایپس میں MediaBrowserService نافذ کرنے کی سفارش کرتا ہے۔

کیسے چیک کریں کہ MediaSession صحیح طریقے سے ترتیب دیا گیا ہے؟

فعال سیشنز، ان کے Callbacks اور PlaybackState دیکھنے کے لیے adb shell dumpsys media_session کمانڈ استعمال کریں۔ یہ افادیت اپنے ٹیگ، سرگرمی کی حالت اور آخری معلوم حالت کے ساتھ تمام رجسٹرڈ سیشن دکھاتی ہے — ڈیبگنگ کے لیے ایک آسان ٹول۔

خلاصہ

  • MediaSession Android میں پلے بیک کو منظم کرنے کا معیاری طریقہ ہے، جو API 21 سے RemoteControlClient کی جگہ لیتا ہے۔
  • سیشن Callback سسٹم کے ذریعے Bluetooth، ہیڈفون، Android Auto اور سسٹم میڈیا سینٹر سے کمانڈز وصول کرتا ہے۔
  • PlaybackState اور MediaMetadata سسٹم UI کے ساتھ درست ہم آہنگی کے لیے دو لازمی اجزاء ہیں۔
  • انضمام AndroidX میڈیا سے MediaSessionCompat کے ذریعے کیا جاتا ہے، جو API 14+ کے ساتھ مطابقت فراہم کرتا ہے۔
  • سسٹم میڈیا سینٹر میں نمائش کے لیے MediaBrowserService اور MediaStyle اطلاع کے ساتھ پیش منظر کی خدمت درکار ہے۔
  • Audio Focus کا انتظام ایک الگ کام ہے جو MediaSession خودکار نہیں کرتا۔ ڈویلپر آزادانہ طور پر فوکس کا انتظام کرتا ہے۔
  • ڈیبگنگ کے لیے، فعال سیشنز اور ان کی حالت دیکھنے کے لیے adb shell dumpsys media_session استعمال کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں