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 मिलीसेकंड से कम लेती है।
सही 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें