Audio Focus ایک Android میکانزم ہے جو متعدد ایپلیکیشنز کے ذریعہ آڈیو آؤٹ پٹ کے بیک وقت استعمال کو منظم کرتا ہے۔ یہ آوازوں کے اوورلیپنگ کو روکتا ہے: جب ایک ایپ پلے بیک شروع کرتی ہے، تو سسٹم خود بخود دوسری کو کم یا روک دیتا ہے۔ Android Developer Guide, 2026 کے مطابق، Audio Focus آڈیو چلانے والی تمام ایپس کے لیے لازمی ہے — اس کے بغیر Google Play اپ ڈیٹ کو مسترد کر سکتا ہے۔
اہم نکات
Audio Focus Android میں ایک مرکزی آڈیو ثالثی نظام ہے۔ جب کوئی ایپ فوکس کی درخواست کرتی ہے، تو سسٹم چیک کرتا ہے کہ آیا کوئی فعال فوکس “مالک” ہے اور اسے نقصان کی اطلاع بھیجتا ہے۔ مالک فوکس کی قسم کے لحاظ سے آواز کم کر سکتا ہے (duck)، پلے بیک روک سکتا ہے، یا اسے نظر انداز کر سکتا ہے۔
Android 8.0 سے پہلے، فوکس AudioManager.requestAudioFocus(callback, stream, durationHint) کے ذریعے منظم کیا جاتا تھا۔ Android 8.0 سے شروع ہو کر، AudioFocusRequest متعارف کرایا گیا، جس نے درخواست کی قسم اور خودکار فوکس بحالی کی وضاحت کرنے کی صلاحیت شامل کی۔ Android 12 میں میکانزم کو مضبوط کیا گیا — Google Play پر شائع ہونے کے لیے تمام میڈیا پلیئرز کو فوکس کو صحیح طریقے سے سنبھالنا چاہیے۔
Google I/O 2024 کے مطابق، آڈیو ایپ کے جائزوں میں تقریباً 15% صارفین کی شکایات آواز کے اوورلیپنگ سے متعلق ہیں۔ صحیح Audio Focus کا نفاذ اس مسئلے کو حل کرتا ہے اور سننے کے وقت میں صارف کے تجربے کو 30% بہتر بناتا ہے۔
یہ سمجھنا ضروری ہے کہ Audio Focus خود بخود پلے بیک کو کنٹرول نہیں کرتا۔ یہ صرف ایپ کو فوکس کے واقعات کے بارے میں مطلع کرتا ہے۔ ایپ خود فیصلہ کرتی ہے: پلیئر کو روکنا، والیوم کم کرنا یا چلاتے رہنا۔ سسٹم مجبور نہیں کرتا — یہ تعمیراتی فیصلہ ڈویلپر پر چھوڑ دیا گیا ہے۔
استثنا نیویگیشن ایپس (Google Maps، Yandex Maps) ہیں۔ وہ AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK فوکس کی قسم کی درخواست کر سکتی ہیں، جہاں موجودہ پلیئر کی آواز کم ہو جاتی ہے جبکہ صوتی ہدایات اس کے اوپر بجتی ہیں۔ ہدایت ختم ہونے کے بعد، پلیئر خود بخود والیوم بحال کر دیتا ہے۔
سسٹم ایک واحد فعال آڈیو فوکس مالک کو برقرار رکھتا ہے۔ جب کوئی نئی ایپ فوکس کی درخواست کرتی ہے، تو سسٹم ترجیح کا تعین کرتا ہے اور موجودہ مالک کو ایک واقعہ بھیجتا ہے۔ اگر موجودہ مالک واقعہ کو نظر انداز کرتا ہے اور اونچی آواز میں چلاتا رہتا ہے، تو سسٹم کوئی سزا نہیں لگاتا — ذمہ داری مکمل طور پر پلیئر پر ہے۔
فوکس کی درخواست میں ایک durationHint پیرامیٹر شامل ہے جو سسٹم کو متوقع مدت بتاتا ہے: AUDIOFOCUS_GAIN (لمبا پلے بیک — موسیقی، پوڈکاسٹ)، AUDIOFOCUS_GAIN_TRANSIENT (مختصر مدت — اطلاع کی آواز، نیویگیشن)، AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (موجودہ پلیئر کی آواز کم کرنے کی اجازت کے ساتھ مختصر مدت)۔
فوکس کے نقصان پر، ایپ تین کوڈز میں سے ایک حاصل کرتی ہے: AUDIOFOCUS_LOSS (طویل مدتی نقصان — کسی اور ایپ نے موسیقی شروع کی)، AUDIOFOCUS_LOSS_TRANSIENT (عارضی نقصان — کال، اطلاع)، AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (آواز کم کرنے کے امکان کے ساتھ عارضی نقصان)۔ ہر کوڈ کو اپنے ردعمل کی ضرورت ہوتی ہے۔
ایک صارف ایپ A میں موسیقی سن رہا ہے۔ ایک کال آتی ہے — ایپ B (فون) AUDIOFOCUS_GAIN_TRANSIENT کی درخواست کرتی ہے۔ سسٹم ایپ A کو AUDIOFOCUS_LOSS_TRANSIENT بھیجتا ہے۔ پلیئر رک جاتا ہے۔ کال ختم ہونے کے بعد، ایپ B فوکس جاری کرتی ہے، سسٹم AUDIOFOCUS_GAIN کے ذریعے ایپ A کو مطلع کرتا ہے — پلیئر پلے بیک دوبارہ شروع کرتا ہے۔ پورا سلسلہ 50 ms سے کم وقت لیتا ہے۔
صحیح durationHint کا انتخاب Audio Focus کو نافذ کرتے وقت کلیدی فیصلہ ہے۔ غلط قسم کا انتخاب یا تو آواز کے اوورلیپنگ، غیر ضروری پلیئر رک جانے، یا صارف کی جلن کا باعث بنتا ہے۔
| درخواست کی قسم | منظرنامہ | مالک کا ردعمل |
|---|---|---|
| AUDIOFOCUS_GAIN | موسیقی، پوڈکاسٹ شروع کرنا | AUDIOFOCUS_LOSS — پلیئر کو رکنا چاہیے |
| AUDIOFOCUS_GAIN_TRANSIENT | کال، صوتی اطلاع | AUDIOFOCUS_LOSS_TRANSIENT — روکیں |
| AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK | GPS ہدایت، مختصر سگنل | AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — آواز کم کریں |
| AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE | صوتی تلاش، ریکارڈنگ | AUDIOFOCUS_LOSS — مکمل رکنا |
ڈک (Duck) ایک ثانوی آواز بجنے کے دوران مرکزی پلیئر کے والیوم کو عارضی طور پر 20–30% تک کم کرنا ہے۔ Android AudioManager.adjustSuggestedStreamVolume کے ذریعے دستی ڈکنگ کے لیے API فراہم کرتا ہے، لیکن زیادہ تر پلیئرز ڈکنگ کو اپنے ذرائع سے نافذ کرتے ہیں۔ Android دستاویزات (2026) کے مطابق، ڈک ہینڈلنگ 3 سیکنڈ سے زیادہ نہیں چلنی چاہیے، جس کے بعد والیوم بحال کر دیا جاتا ہے۔
Audio Focus کو صحیح طریقے سے نافذ کرنے کے لیے، آپ کو ترتیب وار تین مراحل انجام دینے کی ضرورت ہے: ایک درخواست بنائیں، پلے بیک سے پہلے فوکس کی درخواست کریں، اور کال بیک میں واقعہ کو سنبھالیں۔ AndroidX میڈیا سے AudioFocusRequestCompat کا استعمال Android کے تمام ورژنز کے ساتھ مطابقت کو یقینی بناتا ہے۔
val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val focusRequest = AudioFocusRequestCompat.Builder()
.setFocusGain(AudioManagerCompat.AUDIOFOCUS_GAIN)
.setOnAudioFocusChangeListener(focusChangeListener)
.build()
val result = AudioManagerCompat.requestAudioFocus(audioManager, focusRequest)
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
startPlayback()
}
فوکس کی درخواست ہر بار جب صارف Play دباتا ہے، پلے بیک شروع کرنے سے پہلے کی جانی چاہیے۔ اگر نتیجہ AUDIOFOCUS_REQUEST_GRANTED ہے — بجانا شروع کریں۔ اگر DENIED ہے — صارف کو پیغام دکھائیں یا فوکس حاصل ہونے تک پلے بیک ملتوی کریں۔
private val focusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->
when (focusChange) {
AudioManager.AUDIOFOCUS_GAIN -> {
restoreVolume()
if (wasPlayingBeforeLoss) resumePlayback()
}
AudioManager.AUDIOFOCUS_LOSS -> {
pausePlayback()
wasPlayingBeforeLoss = false
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
pausePlayback()
wasPlayingBeforeLoss = true
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK -> {
duckVolume()
}
}
}
کال بیک میں، AUDIOFOCUS_LOSS اور AUDIOFOCUS_LOSS_TRANSIENT کے درمیان فرق کرنا ضروری ہے۔ پہلی صورت میں، پلیئر کو خود بخود دوبارہ شروع نہیں ہونا چاہیے — صارف نے واضح طور پر دوسری آڈیو شروع کی۔ دوسری میں، یہ AUDIOFOCUS_GAIN حاصل کرنے پر خود بخود دوبارہ شروع ہو سکتا ہے۔ wasPlayingBeforeLoss پرچم یہ یاد رکھنے میں مدد کرتا ہے کہ پلے بیک کو بحال کرنے کی ضرورت ہے یا نہیں۔
private fun abandonAudioFocus() {
AudioManagerCompat.abandonAudioFocusRequest(audioManager, focusRequest)
}
abandonAudioFocusRequest کو کال کرنا سسٹم کو بتاتا ہے کہ ایپ کو مزید فوکس کی ضرورت نہیں ہے۔ پلیئر کو روکنے اور رکنے پر اسے کال کرنا ضروری ہے۔ اگر فوکس جاری نہیں کیا گیا، تو AUDIOFOCUS_GAIN کی درخواست کرنے والی دوسری ایپ کو LOSS نہیں ملے گا اور آوازیں اوورلیپ ہوں گی۔
فوکس کے نقصان کو صحیح طریقے سے سنبھالنا Google Play کے جائزے کو پاس کرنے کے لیے ایک اہم ضرورت ہے۔ غلط ہینڈلنگ منفی جائزوں کا باعث بنتی ہے: صارفین شکایت کرتے ہیں کہ کال کے دوران یا نیویگیشن کے اوپر موسیقی چلتی رہتی ہے۔
AUDIOFOCUS_LOSS حاصل کرنے پر، پلیئر کو رک جانا چاہیے اور اس وقت تک دوبارہ شروع نہیں ہونا چاہیے جب تک صارف واضح طور پر Play نہ دبائے۔ AUDIOFOCUS_LOSS_TRANSIENT (کال، اطلاع) پر، پلیئر رک جاتا ہے اور فوکس بحال ہونے پر خود بخود دوبارہ شروع ہو جاتا ہے۔ AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK پر، پلیئر بیرونی آڈیو چلنے کے دوران عارضی طور پر والیوم کو 20–30% تک کم کر دیتا ہے۔
Android ڈویلپر گائیڈ (2026) کے مطابق، ڈک کو موجودہ AudioTrack والیوم لیول کو 0.2–0.3 کے فیکٹر سے ضرب دے کر نافذ کیا جانا چاہیے۔ AudioManager.setStreamVolume استعمال نہ کریں — یہ سسٹم والیوم بدلتا ہے اور دوسری ایپس کو متاثر کرتا ہے۔ ڈکنگ صرف اپنے پلیئر کی طرف سے کی جاتی ہے۔
آنے والی کال پر، سسٹم خود بخود فون ایپ کے ذریعے AUDIOFOCUS_GAIN_TRANSIENT کی درخواست کرتا ہے۔ پلیئر AUDIOFOCUS_LOSS_TRANSIENT حاصل کرتا ہے اور رک جاتا ہے۔ کال ختم ہونے کے بعد یا اگر صارف کال مسترد کرتا ہے، فوکس واپس آ جاتا ہے — اگر یہ میوزک پلیئر ہے تو پلیئر خود بخود پلے بیک دوبارہ شروع کر دیتا ہے۔
نیویگیشن ایپس (Google Maps) کے لیے، صوتی ہدایات کے دوران AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK استعمال کیا جاتا ہے۔ پلیئر کی آواز 2–3 سیکنڈ کے لیے کم ہو جاتی ہے، پھر والیوم بحال ہو جاتا ہے۔ اگر صارف موسیقی کے بجائے پوڈکاسٹ سن رہا ہے، تو ڈکنگ کے بجائے روکنا بہتر ہے — پوڈکاسٹ میں ہر سیکنڈ اہمیت رکھتا ہے۔
عملی طور پر، ڈویلپرز کئی معیاری منظرناموں کا سامنا کرتے ہیں جہاں Audio Focus مختلف طریقے سے برتاؤ کرتا ہے۔ آئیے عام معاملات اور صحیح ردعمل دیکھتے ہیں۔
ایک پرچم نافذ کرنا ضروری ہے جو یاد رکھے کہ فوکس کے نقصان سے پہلے موسیقی چل رہی تھی یا نہیں۔ اگر صارف نے خود روکا اور پھر کال آئی — دوبارہ شروع نہ کریں۔ پرچم صارف کے واضح روکنے پر ری سیٹ ہوتا ہے اور پلے بیک شروع ہونے پر سیٹ ہوتا ہے۔
Google UX تحقیق (2024) کے مطابق، کال کے بعد خودکار دوبارہ شروع صارف کی اطمینان میں 22% اضافہ کرتا ہے۔ لیکن اگر پلیئر صارف کے پہلے سے ویڈیو دیکھنا شروع کرنے کے بعد دوبارہ شروع ہوتا ہے — یہ جلن کا باعث بنتا ہے۔ wasPlayingBeforeLoss پرچم غلط دوبارہ شروع کو روکتا ہے۔
اکثر پوچھے گئے سوالات
ہاں، Android 12 سے شروع ہو کر، Google Play آڈیو چلانے والی تمام ایپس کے لیے Audio Focus کے نفاذ کی سفارش کرتا ہے۔ Music & Audio زمرے کی ایپس کو اشاعت کے لیے اسے نافذ کرنا ضروری ہے۔ نظر انداز کرنا اپ ڈیٹ کو مسترد کرنے کا باعث بن سکتا ہے۔
اپنا پلیئر شروع کریں، پھر دوسری آڈیو ایپ (مثلاً YouTube Music) کھولیں۔ آپ کا پلیئر رک جانا چاہیے۔ پھر YouTube Music بند کریں — پلیئر کو خود بخود دوبارہ شروع ہونا چاہیے۔ ڈک ٹیسٹ کے لیے، صوتی ہدایات کے ساتھ Google Maps استعمال کریں۔
سسٹم کہتا ہے: “کسی اور ایپ کو مختصر طور پر ایک چھوٹی آواز چلانے کی ضرورت ہے — اپنے پلیئر کی آواز کم کریں۔” یہ صوتی ہدایات اور مختصر اطلاعات کے لیے بہترین ہے۔ بیرونی آڈیو ختم ہونے کے بعد دستی مداخلت کے بغیر والیوم بحال ہو جاتا ہے۔
باضابطہ طور پر ہاں — سسٹم مجبور نہیں کرتا۔ لیکن عملی طور پر اس کا مطلب آواز کا اوورلیپنگ ہے۔ صارف ایک ساتھ موسیقی اور کال سنے گا، جو منفی تجربے کا باعث بنتا ہے۔ Google ہمیشہ پلیئر کو روک کر AUDIOFOCUS_LOSS کو سنبھالنے کی سفارش کرتا ہے۔
iOS پر، مساوی کردار Audio Session ادا کرتا ہے، جو AVAudioSession کے ذریعے منظم ہوتا ہے۔ میکانزم ایک جیسے ہیں: زمرے اور اختیارات آواز کے اوورلیپنگ کے دوران رویے کی وضاحت کرتے ہیں۔ تاہم، API اور قواعد نمایاں طور پر مختلف ہیں — ہر فریم ورک اپنے طریقے سے نافذ کیا گیا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں