Audio Focus: esensya ng konsepto, mga mode at pamamahala sa Android

May-akda: IT Sectr Nai-publish: 2026-05-23 Oras ng pagbabasa: 8 min

Audio Focus — mekanismo ng Android na kumokontrol sa sabay-sabay na paggamit ng audio output ng maraming application. Pinipigilan nito ang pag-overlap ng mga tunog: kapag ang isang application ay nagsimulang mag-play, awtomatikong pinapahina o pinipigilan ng system ang isa pa. Ayon sa Android Developer Guide, 2026, Audio Focus ay sapilitan para sa lahat ng application na nagpe-play ng audio — kung wala ito, maaaring tanggihan ng Google Play ang update.

Mga Pangunahing Punto

  • Audio Focus — mekanismo ng system ng Android para sa koordinasyon ng audio playback sa pagitan ng mga application nang walang pag-overlap ng tunog.
  • Ang paghiling ng focus ay ginagawa sa pamamagitan ng AudioManager.requestAudioFocus() na may pagtukoy ng uri at tagal ng playback.
  • Ang system ay nag-aabiso tungkol sa pagbabago ng focus sa pamamagitan ng AudioManager.OnAudioFocusChangeListener na may mga code na AUDIOFOCUS_GAIN, LOSS at DUCK.
  • Auto Resume — kapag nakatanggap ng AUDIOFOCUS_LOSS, dapat ihinto ng application ang playback at ipagpatuloy sa AUDIOFOCUS_GAIN.
  • Ang Android 12+ ay nangangailangan ng sapilitang paggamit ng AudioFocusRequestCompat mula sa AndroidX para sa paggawa ng hiling ng focus.

Ano ang Audio Focus?

Audio Focus — ay isang sentralisadong sistema ng arbitrasyon ng audio sa Android. Kapag ang isang application ay humiling ng focus, sinusuri ng system kung mayroong aktibong „may-ari" ng focus at nagpapadala sa kanya ng abiso ng pagkawala. Ang may-ari ay maaaring magpahina ng tunog (duck), mag-pause ng playback, o magpabaya — depende sa uri ng focus.

Bago ang Android 8.0, ang focus ay pinamamahalaan sa pamamagitan ng AudioManager.requestAudioFocus(callback, stream, durationHint). Simula sa Android 8.0, lumitaw ang AudioFocusRequest, na nagdagdag ng kakayahang tukuyin ang uri ng hiling at awtomatikong pagpapanumbalik ng focus. Sa Android 12, pinalakas ang mekanismo — lahat ng media player ay dapat na wastong pangasiwaan ang focus para sa publikasyon sa Google Play.

Ayon sa Google I/O 2024, humigit-kumulang 15% ng mga reklamo ng user sa mga review ng audio application ay nauugnay sa pag-overlap ng tunog. Ang wastong pagpapatupad ng Audio Focus ay lumulutas sa problemang ito at nagpapabuti sa karanasan ng user ng 30% sa oras ng pakikinig.

Audio Focus at media playback

Mahalagang maunawaan na ang Audio Focus ay hindi awtomatikong namamahala ng playback. Ito ay nag-aabiso lamang sa application tungkol sa mga kaganapan ng focus. Ang application mismo ang nagdedesisyon: i-pause ang player, babaan ang volume, o magpatuloy sa pag-play. Hindi pinipilit ng system — ito ay isang desisyong arkitektural na iniwan sa pagpapasya ng developer.

Ang eksepsyon ay mga application ng nabigasyon (Google Maps, Yandex.Maps). Maaari silang humiling ng focus ng uri na AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK, kung saan ang umiiral na player ay pinapahina at ang mga tagubilin sa boses ay tumutugtog sa ibabaw nito. Pagkatapos ng tagubilin, awtomatikong ibinabalik ng player ang volume.

Paano gumagana ang Audio Focus sa Android

Ang system ay nagpapanatili ng isang aktibong may-ari ng audio focus. Kapag humiling ng focus ang isang bagong application, tinutukoy ng system ang priyoridad at nagpapadala ng kaganapan sa kasalukuyang may-ari. Kung hindi pinansin ng kasalukuyang may-ari ang kaganapan at patuloy na nagpapatugtog nang malakas, hindi naglalapat ng parusa ang system — ang responsibilidad ay ganap na nasa player.

Ang hiling ng focus ay may kasamang parameter na durationHint, na nag-aabiso sa system tungkol sa inaasahang tagal: AUDIOFOCUS_GAIN (mahabang playback — musika, podcast), AUDIOFOCUS_GAIN_TRANSIENT (maikli — tunog ng notipikasyon, nabigasyon), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (maikli na may pahintulot na pahinain ang umiiral na player).

Sa pagkawala ng focus, ang application ay tumatanggap ng isa sa tatlong code: AUDIOFOCUS_LOSS (pangmatagalang pagkawala — ibang application ay nag-start ng musika), AUDIOFOCUS_LOSS_TRANSIENT (pansamantalang pagkawala — tawag, notipikasyon), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (pansamantalang pagkawala na may posibilidad ng pagpapahina). Bawat code ay nangangailangan ng sariling reaksyon.

Kadena ng mga kaganapan ng Audio Focus

Ang user ay nakikinig ng musika sa application A. May papasok na tawag — ang application B (telepono) ay humihiling ng AUDIOFOCUS_GAIN_TRANSIENT. Ang system ay nagpapadala ng AUDIOFOCUS_LOSS_TRANSIENT sa application A. Ang player ay nagpa-pause. Pagkatapos ng tawag, ang application B ay naglalabas ng focus, ang system ay nag-aabiso sa application A sa pamamagitan ng AUDIOFOCUS_GAIN — ang player ay nagpapatuloy ng playback. Ang buong kadena ay tumatagal ng mas mababa sa 50 ms.

Mga uri at mode ng hiling ng Audio Focus

Ang tamang pagpili ng durationHint — ang pangunahing desisyon sa pagpapatupad ng Audio Focus. Ang pagkakamali sa pagpili ng uri ay humahantong sa pag-overlap ng tunog, hindi makatarungang paghinto ng player, o pagkairita ng user.

Uri ng hilingSenaryoReaksyon ng may-ari
AUDIOFOCUS_GAINPagsisimula ng musika, podcastAUDIOFOCUS_LOSS — player ay dapat huminto
AUDIOFOCUS_GAIN_TRANSIENTTawag, notipikasyon sa bosesAUDIOFOCUS_LOSS_TRANSIENT — pause
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKTagubilin ng GPS, maikling signalAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — pagpapahina
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVEPaghahanap sa boses, pagre-recordAUDIOFOCUS_LOSS — ganap na paghinto

Mga katangian ng AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

Duck — pansamantalang pagbaba ng volume ng pangunahing player sa 20–30% habang tumutugtog ang pangalawang tunog. Ang Android ay nagbibigay ng API para sa manu-manong duck sa pamamagitan ng AudioManager.adjustSuggestedStreamVolume, ngunit karamihan ng player ay nagpapatupad ng pagpapahina sa pamamagitan ng kanilang sariling paraan. Ayon sa Android Documentation (2026), ang pagproseso ng duck ay hindi dapat tumagal ng higit sa 3 segundo, pagkatapos nito ay ibinabalik ang volume.

Pagpapatupad ng Audio Focus sa code

Para sa wastong pagpapatupad ng Audio Focus, kinakailangang sunod-sunod na gawin ang tatlong hakbang: gumawa ng hiling, humiling ng focus bago mag-play, at pangasiwaan ang kaganapan sa callback. Ang paggamit ng AudioFocusRequestCompat mula sa AndroidX media ay tinitiyak ang compatibility sa lahat ng bersyon ng Android.

Paggawa at pagsasagawa ng hiling ng Audio Focus

kotlin
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()
}

Ang hiling ng focus ay dapat gawin bago magsimula ng playback sa bawat oras na pinindot ng user ang Play. Kung ang resulta ay AUDIOFOCUS_REQUEST_GRANTED — simulan ang pag-play. Kung DENIED — magpakita ng mensahe sa user o ipagpaliban ang playback hanggang makuha ang focus.

Callback ng pangangasiwa ng pagbabago ng focus

kotlin
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()
        }
    }
}

Sa callback, mahalagang makilala ang AUDIOFOCUS_LOSS at AUDIOFOCUS_LOSS_TRANSIENT. Sa unang kaso, ang player ay HINDI dapat magpatuloy nang awtomatiko — ang user ay nag-start ng ibang audio nang tahasan. Sa pangalawa — maaaring magpatuloy nang awtomatiko kapag nakatanggap ng AUDIOFOCUS_GAIN. Ang flag na wasPlayingBeforeLoss ay tumutulong na matandaan kung kailangang ibalik ang playback.

Paglabas ng Audio Focus

kotlin
private fun abandonAudioFocus() {
    AudioManagerCompat.abandonAudioFocusRequest(audioManager, focusRequest)
}

Ang pagtawag sa abandonAudioFocusRequest ay nag-aabiso sa system na ang application ay hindi na nangangailangan ng focus. Mahalagang tawagin ito sa pause at paghinto ng player. Kung hindi ilalabas ang focus, ang ibang application na humihiling ng AUDIOFOCUS_GAIN ay hindi makakatanggap ng LOSS at ang mga tunog ay mag-o-overlap.

Pangangasiwa ng pagkawala ng audiofocus

Ang wastong pangangasiwa ng pagkawala ng focus — ang pangunahing kinakailangan para makapasa sa pagsusuri sa Google Play. Ang hindi wastong pangangasiwa ay humahantong sa negatibong mga review: nagrereklamo ang mga user na patuloy na tumutugtog ang musika habang may tawag o sa ibabaw ng nabigasyon.

Kapag nakatanggap ng AUDIOFOCUS_LOSS, dapat huminto ang player at hindi magpatuloy hanggang sa tahasang pagpindot ng Play. Sa AUDIOFOCUS_LOSS_TRANSIENT (tawag, notipikasyon), ang player ay nagpa-pause at awtomatikong nagpapatuloy kapag naibalik ang focus. Sa AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK, ang player ay pansamantalang nagpapababa ng volume sa 20–30% habang tumutugtog ang panlabas na audio.

Ayon sa Android Developer Guide (2026), ang duck ay dapat ipatupad sa pamamagitan ng pag-multiply ng kasalukuyang antas ng volume ng AudioTrack sa factor na 0.2–0.3. Huwag gumamit ng AudioManager.setStreamVolume — binabago nito ang system volume at nakakaapekto sa ibang application. Ang duck ay ginagawa lamang sa bahagi ng sariling player.

Pangangasiwa ng mga tawag at nabigasyon

Sa papasok na tawag, awtomatikong humihiling ang system ng AUDIOFOCUS_GAIN_TRANSIENT sa pamamagitan ng application ng Telepono. Ang player ay tumatanggap ng AUDIOFOCUS_LOSS_TRANSIENT at nagpa-pause. Pagkatapos ng tawag o kung tinanggihan ng user ang tawag, bumalik ang focus — awtomatikong nagpapatuloy ang player ng playback, kung ito ay isang music player.

Para sa mga application ng nabigasyon (Google Maps), ginagamit ang AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK sa mga tagubilin sa boses. Ang player ay pinapahina ng 2–3 segundo, pagkatapos ay ibinabalik ang volume. Kung ang user ay nakikinig ng podcast, hindi musika, mas mabuting mag-pause kaysa mag-duck — sa mga podcast, bawat segundo ay mahalaga.

Mga tipikal na senaryo ng paggamit

Sa praktika, ang mga developer ay nakakaharap ng ilang karaniwang senaryo kung saan ang Audio Focus ay kumikilos nang iba. Tingnan natin ang mga tipikal na kaso at tamang reaksyon sa mga ito.

  • Musika + tawag — ang player ay nagpa-pause (AUDIOFOCUS_LOSS_TRANSIENT). Pagkatapos ng tawag awtomatikong nagpapatuloy, kung ang user ay hindi gumawa ng aksyon sa player.
  • Musika + nabigasyon — ang player ay pinapahina habang may tagubilin sa boses (DUCK). Ang volume ay ibinabalik pagkatapos ng parirala.
  • Nag-start ang user ng ibang application — ang player ay tumatanggap ng AUDIOFOCUS_LOSS at humihinto. Pagpapatuloy lamang sa pamamagitan ng Play button.
  • Video + musika sa background — ang video player ay humihiling ng AUDIOFOCUS_GAIN. Ang music player ay tumatanggap ng LOSS at humihinto.
  • Paghahanap sa boses (Google Assistant) — ang application ay tumatanggap ng AUDIOFOCUS_LOSS_TRANSIENT, nagpa-pause at awtomatikong nagpapatuloy pagkatapos ng sagot ng asistant.

Awtomatikong pagpapatuloy pagkatapos ng pagkawala ng focus

Mahalagang magpatupad ng flag na nakakaalala kung ang musika ay tumutugtog bago ang pagkawala ng focus. Kung ang user mismo ay nag-pause at pagkatapos ay may pumasok na tawag — hindi kailangang magpatuloy. Ang flag ay nire-reset sa tahasang pause ng user at itinatakda sa pagsisimula ng playback.

Ayon sa pananaliksik ng UX ng Google (2024), ang awtomatikong pagpapatuloy pagkatapos ng tawag ay nagpapataas ng kasiyahan ng user ng 22%. Ngunit kung ang player ay nagpatuloy pagkatapos na magsimulang manood ng video ang user — ito ay nagdudulot ng pagkairita. Ang flag na wasPlayingBeforeLoss ay nagpoprotekta laban sa maling pagpapatuloy.

Mga Madalas Itanong

Ang Audio Focus ba ay sapilitan para sa lahat ng application na may audio?

Oo, simula sa Android 12, inirerekomenda ng Google Play ang pagpapatupad ng Audio Focus para sa lahat ng application na nagpe-play ng audio. Ang mga application sa kategoryang Music & Audio ay kinakailangang ipatupad ito para sa publikasyon. Ang pagpapabaya ay maaaring humantong sa pagtanggi ng update.

Paano suriin na ang Audio Focus ay gumagana nang tama?

Simulan ang player, pagkatapos ay buksan ang ibang application na may audio (halimbawa, YouTube Music). Ang iyong player ay dapat mag-pause. Pagkatapos ay isara ang YouTube Music — ang player ay dapat awtomatikong magpatuloy. Para sa duck test, gamitin ang Google Maps na may mga tagubilin sa boses.

Ano ang AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK sa praktika?

Ang system ay nag-aabiso: „Kailangang magpatugtog ng maikling tunog ang ibang application — pahinain ang iyong player". Ito ay optimal para sa mga tagubilin sa boses at maikling notipikasyon. Ang volume ay ibinabalik pagkatapos ng panlabas na audio nang walang manu-manong interbensyon.

Maaari bang tanggihan ang hiling ng pagkawala ng Audio Focus?

Sa pormal, oo — hindi pinipilit ng system. Ngunit sa praktika, ito ay nangangahulugan ng pag-overlap ng tunog. Maririnig ng user ang musika at tawag nang sabay, na humahantong sa negatibong karanasan. Inirerekomenda ng Google na palaging pangasiwaan ang AUDIOFOCUS_LOSS sa pamamagitan ng paghinto ng player.

Gumagana ba ang Audio Focus sa ibang platform maliban sa Android?

Sa iOS, ang katulad na papel ay ginagampanan ng Audio Session, na pinamamahalaan sa pamamagitan ng AVAudioSession. Ang mga mekanismo ay magkatulad: ang mga kategorya at opsyon ay tumutukoy sa pag-uugali sa pag-overlap ng tunog. Gayunpaman, ang API at mga patakaran ay lubhang naiiba — bawat framework ay ipinatupad sa sarili nitong paraan.

Buod

  • Audio Focus — ang system audio arbiter sa Android na pumipigil sa pag-overlap ng tunog mula sa iba't ibang application.
  • Ang paghiling ng focus ay ginagawa sa pamamagitan ng AudioFocusRequestCompat na may pagtukoy ng durationHint: GAIN, TRANSIENT o TRANSIENT_MAY_DUCK.
  • Ang callback na OnAudioFocusChangeListener ay humahawak ng apat na kaganapan: GAIN, LOSS, LOSS_TRANSIENT at LOSS_TRANSIENT_CAN_DUCK.
  • Sa AUDIOFOCUS_LOSS, ang player ay humihinto; sa TRANSIENT — nagpa-pause na may awtomatikong pagpapatuloy; sa DUCK — pinapahina.
  • Mahalagang tandaan ang flag na wasPlayingBeforeLoss upang hindi ipagpatuloy ang playback pagkatapos ng tahasang pause ng user.
  • Ang paglabas ng focus sa pamamagitan ng abandonAudioFocusRequest ay sapilitan sa pause at paghinto ng player.
  • Sa iOS, ang katumbas ng Audio Focus ay Audio Session (AVAudioSession) na may sariling mga kategorya at mode.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din