Audio Focus: anlayışın mahiyyəti, rejimləri və Android-də idarəsi

Müəllif: IT Sectr Dərc olunub: 2026-05-23 Oxuma vaxtı: 8 dəq

Audio Focus — Android mexanizmidir, bir neçə tətbiq tərəfindən audio çıxışının eyni vaxtda istifadəsini tənzimləyir. Səslərin üst-üstə düşməsinin qarşısını alır: bir tətbiq oxutmağa başlayanda sistem avtomatik olaraq digərini səssizləşdirir və ya dayandırır. Android Developer Guide, 2026-ya görə, Audio Focus audio oxudan bütün tətbiqlər üçün məcburidir — onsuz Google Play yeniləməni rədd edə bilər.

Əsas məqamlar

  • Audio Focus — Android-in səslərin üst-üstə düşmədən tətbiqlər arasında audio oxutmanı koordinasiya edən sistem mexanizmidir.
  • Fokus tələbi AudioManager.requestAudioFocus() vasitəsilə oxutmanın növü və müddəti göstərilməklə yerinə yetirilir.
  • Sistem fokus dəyişikliyi barədə AudioManager.OnAudioFocusChangeListener vasitəsilə AUDIOFOCUS_GAIN, LOSS və DUCK kodları ilə xəbərdarlıq edir.
  • Auto Resume — AUDIOFOCUS_LOSS aldıqda tətbiq oxutmanı dayandırmalı və AUDIOFOCUS_GAIN aldıqda bərpa etməlidir.
  • Android 12+ fokus tələbi yaratmaq üçün AndroidX-dən AudioFocusRequestCompat-dən istifadəni məcburi edir.

Audio Focus nədir?

Audio Focus — Android-də mərkəzləşdirilmiş audio arbitraj sistemidir. Bir tətbiq fokus tələb etdikdə, sistem aktiv fokus «sahibinin» olub-olmadığını yoxlayır və ona itki barədə bildiriş göndərir. Sahib fokusun növündən asılı olaraq səsi zəiflədə (duck), oxutmanı dayandıra və ya görməməzlikdən gələ bilər.

Android 8.0-dan əvvəl fokus AudioManager.requestAudioFocus(callback, stream, durationHint) vasitəsilə idarə olunurdu. Android 8.0-dan başlayaraq AudioFocusRequest meydana gəldi ki, bu da sorğu növünü və fokusun avtomatik bərpasını göstərməyə imkan verdi. Android 12-də mexanizm gücləndirildi — bütün media oxuducuları Google Play-də dərc olunmaq üçün fokusu düzgün idarə etməlidirlər.

Google I/O 2024 məlumatına görə, audio tətbiqlərin rəylərində istifadəçi şikayətlərinin təxminən 15%-i səslərin üst-üstə düşməsi ilə bağlıdır. Audio Focus-un düzgün tətbiqi bu problemi həll edir və istifadəçi təcrübəsini dinləmə müddətinə görə 30% yaxşılaşdırır.

Audio Focus və media oxutma

Anlamaq vacibdir ki, Audio Focus oxutmanı avtomatik idarə etmir. O, yalnız tətbiqə fokus hadisələri barədə məlumat verir. Tətbiq özü qərar verir: oxuducunu dayandırmaq, səsi azaltmaq və ya davam etdirmək. Sistem məcbur etmir — bu, memarlıq qərarı olaraq tərtibatçının ixtiyarına buraxılıb.

İstisna naviqasiya tətbiqləridir (Google Maps, Yandex.Maps). Onlar AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK tipli fokus tələb edə bilərlər ki, bununla da mövcud oxuducu səssizləşir və səsli göstərişlər üstündə səslənir. Göstəriş bitdikdən sonra oxuducu avtomatik olaraq səsi bərpa edir.

Android-də Audio Focus necə işləyir

Sistem yalnız bir aktiv audio fokus sahibini saxlayır. Yeni tətbiq fokus tələb etdikdə, sistem prioriteti müəyyənləşdirir və cari sahibə hadisə göndərir. Əgər cari sahib hadisəni görməməzliyə vurub yüksək səslə oxutmağa davam edərsə, sistem sanksiya tətbiq etmir — məsuliyyət tamamilə oxuducunun üzərindədir.

Fokus tələbi durationHint parametrini ehtiva edir ki, bu da sistemə gözlənilən müddət barədə məlumat verir: AUDIOFOCUS_GAIN (uzunmüddətli oxutma — musiqi, podkast), AUDIOFOCUS_GAIN_TRANSIENT (qısamüddətli — bildiriş səsi, naviqasiya), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (mövcud oxuducunu səssizləşdirməyə icazə ilə qısamüddətli).

Fokus itkisində tətbiq üç koddan birini alır: AUDIOFOCUS_LOSS (uzunmüddətli itki — başqa tətbiq musiqi işə saldı), AUDIOFOCUS_LOSS_TRANSIENT (müvəqqəti itki — zəng, bildiriş), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (səssizləşdirmə imkanı ilə müvəqqəti itki). Hər bir kod öz reaksiyasını tələb edir.

Audio Focus hadisə zənciri

İstifadəçi A tətbiqində musiqi dinləyir. Zəng gəlir — B tətbiqi (telefon) AUDIOFOCUS_GAIN_TRANSIENT tələb edir. Sistem A tətbiqinə AUDIOFOCUS_LOSS_TRANSIENT göndərir. Oxuducu dayanır. Zəng bitdikdən sonra B tətbiqi fokusu azad edir, sistem A tətbiqinə AUDIOFOCUS_GAIN vasitəsilə məlumat verir — oxuducu oxutmanı bərpa edir. Bütün zəncir 50 ms-dən az çəkir.

Audio Focus tələbinin növləri və rejimləri

Düzgün durationHint seçimi — Audio Focus-un tətbiqində əsas qərardır. Növ seçimində səhv ya səslərin üst-üstə düşməsinə, ya əsassız oxuducu dayanmasına, ya da istifadəçinin narazılığına səbəb olur.

Sorğu növüSsenariSahibin reaksiyası
AUDIOFOCUS_GAINMusiqi, podkast işə salmaAUDIOFOCUS_LOSS — oxuducu dayanmalıdır
AUDIOFOCUS_GAIN_TRANSIENTZəng, səsli bildirişAUDIOFOCUS_LOSS_TRANSIENT — fasilə
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKGPS göstərişi, qısa siqnalAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — səssizləşdirmə
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVESəsli axtarış, yazıAUDIOFOCUS_LOSS — tam dayanma

AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK-un xüsusiyyətləri

Duck — ikinci dərəcəli səsin səslənməsi müddətində əsas oxuducunun səsinin 20–30%-ə qədər müvəqqəti azaldılmasıdır. Android əl ilə duck üçün AudioManager.adjustSuggestedStreamVolume vasitəsilə API təqdim edir, lakin əksər oxuducular səssizləşdirməni öz vasitələri ilə həyata keçirir. Android Documentation (2026)-ya görə, duck işləməsi 3 saniyədən çox olmamalıdır, sonra səs bərpa edilir.

Audio Focus-un koda tətbiqi

Audio Focus-un düzgün tətbiqi üçün ardıcıl olaraq üç addımı yerinə yetirmək lazımdır: sorğu yaratmaq, oxutmaqdan əvvəl fokus tələb etmək və callback-də hadisəni idarə etmək. AndroidX media-dan AudioFocusRequestCompat istifadəsi Android-in bütün versiyaları ilə uyğunluğu təmin edir.

Audio Focus sorğusunun yaradılması və icrası

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

Fokus sorğusu hər dəfə istifadəçi Play düyməsini basdıqda oxutma başlamazdan əvvəl yerinə yetirilməlidir. Nəticə AUDIOFOCUS_REQUEST_GRANTED olarsa — oxutmağa başlayın. DENIED olarsa — istifadəçiyə mesaj göstərin və ya fokus əldə olunana qədər oxutmanı təxirə salın.

Fokus dəyişikliyinin idarə callback-i

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

Callback-də AUDIOFOCUS_LOSSAUDIOFOCUS_LOSS_TRANSIENT-i fərqləndirmək vacibdir. Birinci halda oxuducu avtomatik bərpa edilməməlidir — istifadəçi açıq şəkildə başqa audio işə salıb. İkincidə — AUDIOFOCUS_GAIN aldıqda avtomatik bərpa edilə bilər. wasPlayingBeforeLoss bayrağı oxutmanı bərpa etmək lazım olub-olmadığını yadda saxlamağa kömək edir.

Audio Focus-un azad edilməsi

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

abandonAudioFocusRequest çağırışı sistemə tətbiqin fokusa ehtiyacının olmadığını bildirir. Bunu fasilə və oxuducunun dayandırılması zamanı çağırmaq vacibdir. Fokus azad edilməzsə, AUDIOFOCUS_GAIN tələb edən başqa tətbiq LOSS almayacaq və səslər üst-üstə düşəcək.

Audiofokus itkisinin idarəsi

Fokus itkisinin düzgün idarəsi — Google Play-də baxışdan keçmək üçün əsas tələbdir. Yanlış idarə mənfi rəylərə gətirib çıxarır: istifadəçilər musiqinin zəng zamanı və ya naviqasiya fonunda səslənməyə davam etməsindən şikayətlənir.

AUDIOFOCUS_LOSS aldıqda oxuducu dayanmalı və açıq şəkildə Play düyməsi basılana qədər bərpa edilməməlidir. AUDIOFOCUS_LOSS_TRANSIENT (zəng, bildiriş) zamanı oxuducu dayanır və fokus bərpa edildikdə avtomatik bərpa olunur. AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK zamanı oxuducu xarici audio səslənməsi müddətində səsi müvəqqəti olaraq 20–30%-ə qədər azaldır.

Android Developer Guide (2026)-ya görə, duck AudioTrack-in cari səs səviyyəsini 0.2–0.3 əmsalına vurmaqla tətbiq edilməlidir. AudioManager.setStreamVolume istifadə etməyin — bu sistem səsini dəyişir və digər tətbiqlərə təsir edir. Duck yalnız öz oxuducunuz tərəfindən yerinə yetirilir.

Zəng və naviqasiyanın idarəsi

Daxil olan zəng zamanı sistem avtomatik olaraq Telefon tətbiqi vasitəsilə AUDIOFOCUS_GAIN_TRANSIENT tələb edir. Oxuducu AUDIOFOCUS_LOSS_TRANSIENT alır və dayanır. Zəng bitdikdən və ya istifadəçi zəngi rədd etdikdən sonra fokus qayıdır — oxuducu avtomatik oxutmanı bərpa edir, əgər bu musiqi oxuducusudursa.

Naviqasiya tətbiqləri (Google Maps) üçün səsli göstərişlər zamanı AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK istifadə olunur. Oxuducu 2–3 saniyə səssizləşir, sonra səs bərpa olunur. Əgər istifadəçi musiqi deyil, podkast dinləyirsə, duck əvəzinə fasilə vermək daha yaxşıdır — podkastlarda hər saniyə vacibdir.

Tipik istifadə ssenariləri

Praktikada tərtibatçılar Audio Focus-un müxtəlif davrandığı bir neçə standart ssenari ilə qarşılaşırlar. Tipik halları və onlara düzgün reaksiyaları nəzərdən keçirək.

  • Musiqi + zəng — oxuducu dayanır (AUDIOFOCUS_LOSS_TRANSIENT). Zəngdən sonra avtomatik bərpa olunur, əgər istifadəçi oxuducuda hərəkət etməyibsə.
  • Musiqi + naviqasiya — oxuducu səsli göstəriş müddətində səssizləşir (DUCK). Səs ifadə bitdikdən sonra bərpa olunur.
  • İstifadəçi başqa tətbiq işə saldı — oxuducu AUDIOFOCUS_LOSS alır və dayanır. Yalnız Play düyməsi ilə bərpa olunur.
  • Video + fonda musiqi — video oxuducu AUDIOFOCUS_GAIN tələb edir. Musiqi oxuducusu LOSS alır və dayanır.
  • Səsli axtarış (Google Assistant) — tətbiq AUDIOFOCUS_LOSS_TRANSIENT alır, dayanır və köməkçinin cavabından sonra avtomatik bərpa olunur.

Fokus itkisindən sonra avtomatik bərpa

Fokus itkisindən əvvəl musiqinin oxuyub-oxumadığını yadda saxlayan bayrağı tətbiq etmək vacibdir. Əgər istifadəçi özü fasilə veribsə, sonra zəng gəlibsə — bərpa etmək lazım deyil. Bayraq istifadəçinin açıq fasiləsində sıfırlanır və oxutma başlanğıcında qurulur.

Google UX tədqiqatlarına (2024) görə, zəngdən sonra avtomatik bərpa istifadəçi məmnuniyyətini 22% artırır. Lakin oxuducu istifadəçi artıq video izləməyə başladıqdan sonra bərpa olunarsa — bu qıcıq yaradır. wasPlayingBeforeLoss bayrağı yalan bərpalardan qoruyur.

Tez-tez verilən suallar

Audio Focus bütün audio tətbiqləri üçün məcburidirmi?

Bəli, Android 12-dən başlayaraq, Google Play audio oxudan bütün tətbiqlər üçün Audio Focus tətbiqini tövsiyə edir. Music & Audio kateqoriyasındakı tətbiqlər dərc olunmaq üçün onu tətbiq etməlidirlər. Görməməzlik yeniləmənin rədd edilməsinə səbəb ola bilər.

Audio Focus-un düzgün işlədiyini necə yoxlamaq olar?

Oxuducunu işə salın, sonra audio ilə başqa tətbiq açın (məsələn, YouTube Music). Oxuducunuz dayanmalıdır. Sonra YouTube Music-i bağlayın — oxuducu avtomatik bərpa olunmalıdır. Duck testi üçün Google Maps-dən səsli göstərişlərlə istifadə edin.

AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK praktikada nədir?

Sistem bildirir: «Başqa tətbiq qısa səsi səsləndirməlidir — oxuducunu səssizləşdir». Bu, səsli göstərişlər və qısa bildirişlər üçün optimaldır. Xarici audio bitdikdən sonra səs əl müdaxiləsi olmadan bərpa olunur.

Audio Focus itkisi tələbini rədd etmək olarmı?

Formal olaraq bəli — sistem məcbur etmir. Lakin praktikada bu səslərin üst-üstə düşməsi deməkdir. İstifadəçi eyni anda musiqi və zəng eşidəcək ki, bu da mənfi təcrübəyə gətirib çıxarır. Google AUDIOFOCUS_LOSS-un oxuducunu dayandırmaqla idarə edilməsini tövsiyə edir.

Audio Focus Android-dən başqa platformalarda işləyirmi?

iOS-da analoji rolu AVAudioSession vasitəsilə idarə olunan Audio Session oynayır. Mexanizmlər oxşardır: kateqoriyalar və seçimlər səslərin üst-üstə düşməsi zamanı davranışı müəyyən edir. Lakin API və qaydalar köklü şəkildə fərqlənir — hər bir freymvork özünəməxsus şəkildə tətbiq olunub.

Xülasə

  • Audio Focus — Android-də müxtəlif tətbiqlərdən səslərin üst-üstə düşməsinin qarşısını alan sistem audio arbitridir.
  • Fokus sorğusu AudioFocusRequestCompat vasitəsilə durationHint göstərilməklə yerinə yetirilir: GAIN, TRANSIENT və ya TRANSIENT_MAY_DUCK.
  • OnAudioFocusChangeListener callback-i dörd hadisəni idarə edir: GAIN, LOSS, LOSS_TRANSIENT və LOSS_TRANSIENT_CAN_DUCK.
  • AUDIOFOCUS_LOSS-da oxuducu dayanır, TRANSIENT-də avtomatik bərpa ilə dayandırılır, DUCK-də səssizləşir.
  • wasPlayingBeforeLoss bayrağını yadda saxlamaq vacibdir ki, istifadəçinin açıq fasiləsindən sonra oxutma bərpa olunmasın.
  • Fokusun abandonAudioFocusRequest vasitəsilə azad edilməsi fasilə və oxuducunun dayanması zamanı məcburidir.
  • iOS-da Audio Focus-un analoqu öz kateqoriyaları və rejimləri ilə Audio Session (AVAudioSession)-dur.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun