Audio Focus: tushunchaning mohiyati, rejimlari va Androidda boshqaruvi

Muallif: IT Sectr Nashr etilgan: 2026-05-23 O'qish vaqti: 8 daq

Audio Focus — Android mexanizmi bo'lib, bir nechta ilovalar tomonidan audio chiqishidan bir vaqtda foydalanishni tartibga soladi. Tovushlarning ustma-ust tushishining oldini oladi: bir ilova tinglashni boshlaganda, tizim avtomatik ravishda boshqasini ovozsiz qiladi yoki to'xtatadi. Android Developer Guide, 2026 ma'lumotlariga ko'ra, Audio Focus audio tinglaydigan barcha ilovalar uchun majburiydir — usiz Google Play yangilanishni rad etishi mumkin.

Asosiy ma'lumotlar

  • Audio Focus — Androidning tovushlar ustma-ust tushmasdan ilovalar o'rtasida audio tinglashni muvofiqlashtiruvchi tizim mexanizmi.
  • Fokus so'rovi AudioManager.requestAudioFocus() orqali tinglash turi va davomiyligi ko'rsatilgan holda amalga oshiriladi.
  • Tizim fokus o'zgarishi haqida AudioManager.OnAudioFocusChangeListener orqali AUDIOFOCUS_GAIN, LOSS va DUCK kodlari bilan xabar beradi.
  • Auto Resume — AUDIOFOCUS_LOSS olinganda ilova tinglashni to'xtatishi va AUDIOFOCUS_GAIN da qayta boshlashi kerak.
  • Android 12+ fokus so'rovini yaratish uchun AndroidX dan AudioFocusRequestCompat dan majburiy foydalanishni talab qiladi.

Audio Focus nima?

Audio Focus — Androidda markazlashtirilgan audio arbitraj tizimi. Bir ilova fokus so'raganida, tizim faol fokus «egasi» bor-yo'qligini tekshiradi va unga yo'qotish haqida xabar yuboradi. Ega fokus turiga qarab tovushni pasaytirishi (duck), tinglashni to'xtatishi yoki e'tiborsiz qoldirishi mumkin.

Android 8.0 dan oldin fokus AudioManager.requestAudioFocus(callback, stream, durationHint) orqali boshqarilgan. Android 8.0 dan boshlab AudioFocusRequest paydo bo'ldi, u so'rov turini va fokusni avtomatik tiklashni ko'rsatish imkoniyatini qo'shdi. Android 12 da mexanizm kuchaytirildi — barcha media pleerlar Google Playda nashr qilish uchun fokusni to'g'ri boshqarishi shart.

Google I/O 2024 ma'lumotlariga ko'ra, audio ilovalar sharhlarida foydalanuvchi shikoyatlarining taxminan 15% tovushlarning ustma-ust tushishi bilan bog'liq. Audio Focusning to'g'ri amalga oshirilishi bu muammoni hal qiladi va foydalanuvchi tajribasini tinglash vaqti bo'yicha 30% yaxshilaydi.

Audio Focus va media tinglash

Tushunish muhimki, Audio Focus tinglashni avtomatik boshqarmaydi. U faqat ilovani fokus hodisalari haqida xabardor qiladi. Ilova o'zi qaror qiladi: pleerni to'xtatish, ovozni pasaytirish yoki davom ettirish. Tizim majburlamaydi — bu arxitektura qarori dasturchi ixtiyoriga qoldirilgan.

Istisno navigatsiya ilovalari (Google Maps, Yandex.Maps). Ular AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK tipidagi fokusni so'rashi mumkin, bunda mavjud pleer ovozi pasaytiriladi va ovozli ko'rsatmalar uning ustida yangraydi. Ko'rsatma tugagandan so'ng, pleer avtomatik ravishda ovozni tiklaydi.

Androidda Audio Focus qanday ishlaydi

Tizim yagona faol audio fokus egasini saqlaydi. Yangi ilova fokus so'raganda, tizim ustuvorlikni aniqlaydi va joriy egasiga hodisa yuboradi. Agar joriy ega hodisani e'tiborsiz qoldirib, baland ovozda tinglashni davom ettirsa, tizim jazo qo'llamaydi — javobgarlik to'liq pleer zimmasida.

Fokus so'rovi durationHint parametrini o'z ichiga oladi, u tizimga kutilayotgan davomiylik haqida xabar beradi: AUDIOFOCUS_GAIN (uzoq muddatli tinglash — musiqa, podkast), AUDIOFOCUS_GAIN_TRANSIENT (qisqa muddatli — bildirishnoma ovozi, navigatsiya), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (mavjud pleerni ovozsiz qilish ruxsati bilan qisqa muddatli).

Fokus yo'qotilganda ilova uchta koddan birini oladi: AUDIOFOCUS_LOSS (uzoq muddatli yo'qotish — boshqa ilova musiqa boshladi), AUDIOFOCUS_LOSS_TRANSIENT (vaqtinchalik yo'qotish — qo'ng'iroq, bildirishnoma), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (ovozni pasaytirish imkoniyati bilan vaqtinchalik yo'qotish). Har bir kod o'z reaksiyasini talab qiladi.

Audio Focus hodisalar zanjiri

Foydalanuvchi A ilovasida musiqa tinglaydi. Qo'ng'iroq keladi — B ilovasi (telefon) AUDIOFOCUS_GAIN_TRANSIENT so'raydi. Tizim A ilovasiga AUDIOFOCUS_LOSS_TRANSIENT yuboradi. Pleer to'xtaydi. Qo'ng'iroq tugagandan so'ng, B ilovasi fokusni bo'shatadi, tizim A ilovasiga AUDIOFOCUS_GAIN orqali xabar beradi — pleer tinglashni davom ettiradi. Butun zanjir 50 ms dan kam davom etadi.

Audio Focus so'rovining turlari va rejimlari

To'g'ri durationHint tanlash — Audio Focusni amalga oshirishdagi asosiy qarordir. Turni tanlashdagi xato yo tovushlarning ustma-ust tushishiga, yo asossiz pleer to'xtashiga, yo foydalanuvchi noroziligiga olib keladi.

So'rov turiSsenariyEganing reaksiyasi
AUDIOFOCUS_GAINMusiqa, podkast ishga tushirishAUDIOFOCUS_LOSS — pleer to'xtashi kerak
AUDIOFOCUS_GAIN_TRANSIENTQo'ng'iroq, ovozli bildirishnomaAUDIOFOCUS_LOSS_TRANSIENT — pauza
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKGPS ko'rsatmasi, qisqa signalAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — ovozni pasaytirish
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVEOvozli qidiruv, yozib olishAUDIOFOCUS_LOSS — to'liq to'xtash

AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK xususiyatlari

Duck — ikkinchi darajali tovush yangrashi vaqtida asosiy pleer ovozining 20–30% gacha vaqtincha pasaytirilishi. Android qo'lda duck uchun AudioManager.adjustSuggestedStreamVolume orqali API taqdim etadi, ammo ko'pchilik pleerlar ovozni pasaytirishni o'z vositalari bilan amalga oshiradi. Android Documentation (2026) ga ko'ra, duck ishlovi 3 soniyadan ortiq davom etmasligi kerak, undan keyin ovoz tiklanadi.

Audio Focusni kodda amalga oshirish

Audio Focusni to'g'ri amalga oshirish uchun ketma-ket uch qadamni bajarish kerak: so'rov yaratish, tinglashdan oldin fokus so'rash va callbackda hodisani boshqarish. AndroidX media dan AudioFocusRequestCompat dan foydalanish Androidning barcha versiyalari bilan moslikni ta'minlaydi.

Audio Focus so'rovini yaratish va bajarish

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 so'rovi har safar foydalanuvchi Play tugmasini bosganda tinglash boshlanishidan oldin bajarilishi kerak. Natija AUDIOFOCUS_REQUEST_GRANTED bo'lsa — tinglashni boshlang. DENIED bo'lsa — foydalanuvchiga xabar ko'rsating yoki fokus olinmaguncha tinglashni kechiktiring.

Fokus o'zgarishini boshqarish callbacki

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

Callbackda AUDIOFOCUS_LOSS va AUDIOFOCUS_LOSS_TRANSIENT ni farqlash muhim. Birinchi holatda pleer avtomatik ravishda qayta boshlanmasligi kerak — foydalanuvchi aniq boshqa audioni ishga tushirgan. Ikkinchisida — AUDIOFOCUS_GAIN olinganda avtomatik qayta boshlanishi mumkin. wasPlayingBeforeLoss bayrog'i tinglashni tiklash kerakligini eslab qolishga yordam beradi.

Audio Focusni bo'shatish

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

abandonAudioFocusRequest chaqiruvi tizimga ilova endi fokusga muhtoj emasligini bildiradi. Buni pauza va pleerni to'xtatishda chaqirish muhim. Agar fokus bo'shatilmasa, AUDIOFOCUS_GAIN so'ragan boshqa ilova LOSS olmaydi va tovushlar ustma-ust tushadi.

Audiofokus yo'qotilishini boshqarish

Fokus yo'qotilishini to'g'ri boshqarish — Google Playda ko'rib chiqishdan o'tish uchun asosiy talabdir. Noto'g'ri boshqarish salbiy sharhlarga olib keladi: foydalanuvchilar musiqa qo'ng'iroq vaqtida yoki navigatsiya fonida tinglashda davom etishidan shikoyat qiladilar.

AUDIOFOCUS_LOSS olinganda pleer to'xtashi va aniq Play tugmasi bosilmaguncha qayta boshlanmasligi kerak. AUDIOFOCUS_LOSS_TRANSIENT (qo'ng'iroq, bildirishnoma) da pleer to'xtaydi va fokus tiklanganda avtomatik qayta boshlanadi. AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK da pleer tashqi audio yangrashi vaqtida ovozni vaqtincha 20–30% gacha pasaytiradi.

Android Developer Guide (2026) ga ko'ra, duck AudioTrackning joriy ovoz darajasini 0.2–0.3 koeffitsiyentiga ko'paytirish orqali amalga oshirilishi kerak. AudioManager.setStreamVolume dan foydalanmang — bu tizim ovozini o'zgartiradi va boshqa ilovalarga ta'sir qiladi. Duck faqat o'z pleeringiz tomonidan bajariladi.

Qo'ng'iroq va navigatsiyani boshqarish

Kiruvchi qo'ng'iroqda tizim avtomatik ravishda Telefon ilovasi orqali AUDIOFOCUS_GAIN_TRANSIENT so'raydi. Pleer AUDIOFOCUS_LOSS_TRANSIENT oladi va to'xtaydi. Qo'ng'iroq tugagandan yoki foydalanuvchi qo'ng'iroqni rad etgandan so'ng, fokus qaytadi — pleer avtomatik tinglashni davom ettiradi, agar bu musiqa pleeri bo'lsa.

Navigatsiya ilovalari (Google Maps) uchun ovozli ko'rsatmalarda AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK ishlatiladi. Pleer 2–3 soniyaga ovozsizlanadi, keyin ovoz tiklanadi. Agar foydalanuvchi musiqa emas, podkast tinglayotgan bo'lsa, duck o'rniga pauza qilish yaxshiroq — podkastlarda har soniya muhim.

Odatiy foydalanish ssenariylari

Amalda dasturchilar Audio Focus turli xil harakat qiladigan bir nechta standart ssenariylarga duch kelishadi. Odatiy holatlar va ularga to'g'ri reaksiyalarni ko'rib chiqamiz.

  • Musiqa + qo'ng'iroq — pleer to'xtaydi (AUDIOFOCUS_LOSS_TRANSIENT). Qo'ng'iroqdan so'ng avtomatik qayta boshlanadi, agar foydalanuvchi pleerda harakat qilmagan bo'lsa.
  • Musiqa + navigatsiya — pleer ovozli ko'rsatma vaqtida ovozsizlanadi (DUCK). Ovoz ibora tugagandan so'ng tiklanadi.
  • Foydalanuvchi boshqa ilova ishga tushirdi — pleer AUDIOFOCUS_LOSS oladi va to'xtaydi. Faqat Play tugmasi bilan qayta boshlanadi.
  • Video + fonda musiqa — video pleer AUDIOFOCUS_GAIN so'raydi. Musiqa pleeri LOSS oladi va to'xtaydi.
  • Ovozli qidiruv (Google Assistant) — ilova AUDIOFOCUS_LOSS_TRANSIENT oladi, to'xtaydi va yordamchi javobidan so'ng avtomatik qayta boshlanadi.

Fokus yo'qotilishidan so'ng avtomatik qayta boshlash

Fokus yo'qotilishidan oldin musiqa tinglayotganligini eslab qoladigan bayroqni amalga oshirish muhim. Agar foydalanuvchi o'zi pauza qilgan bo'lsa, keyin qo'ng'iroq kelgan bo'lsa — qayta boshlash kerak emas. Bayroq foydalanuvchining aniq pauzasida o'chiriladi va tinglash boshlanishida o'rnatiladi.

Google UX tadqiqotlariga (2024) ko'ra, qo'ng'iroqdan so'ng avtomatik qayta boshlash foydalanuvchi qoniqishini 22% oshiradi. Ammo pleer foydalanuvchi allaqachon video ko'rishni boshlaganidan so'ng qayta boshlansa — bu norozilikka sabab bo'ladi. wasPlayingBeforeLoss bayrog'i yolg'on qayta boshlashlardan himoya qiladi.

Tez-tez beriladigan savollar

Audio Focus barcha audio ilovalar uchun majburiymi?

Ha, Android 12 dan boshlab, Google Play audio tinglaydigan barcha ilovalar uchun Audio Focus amalga oshirilishini tavsiya qiladi. Music & Audio toifasidagi ilovalar nashr qilish uchun uni amalga oshirishi shart. E'tiborsizlik yangilanishning rad etilishiga olib kelishi mumkin.

Audio Focusning to'g'ri ishlashini qanday tekshirish mumkin?

Pleerni ishga tushiring, keyin audio bilan boshqa ilova oching (masalan, YouTube Music). Pleeringiz to'xtashi kerak. Keyin YouTube Music ni yoping — pleer avtomatik qayta boshlanishi kerak. Duck testi uchun Google Maps dan ovozli ko'rsatmalar bilan foydalaning.

AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK amalda nima?

Tizim xabar beradi: «Boshqa ilova qisqa tovushni tinglashi kerak — pleeringni ovozsiz qil». Bu ovozli ko'rsatmalar va qisqa bildirishnomalar uchun maqbuldir. Tashqi audio tugagandan so'ng ovoz qo'lda aralashuvsiz tiklanadi.

Audio Focus yo'qotilishi so'rovini rad etish mumkinmi?

Rasmiy ravishda ha — tizim majburlamaydi. Ammo amalda bu tovushlarning ustma-ust tushishi degani. Foydalanuvchi bir vaqtda musiqa va qo'ng'iroqni eshitadi, bu salbiy tajribaga olib keladi. Google AUDIOFOCUS_LOSS ni pleerni to'xtatish bilan boshqarishni tavsiya qiladi.

Audio Focus Androiddan boshqa platformalarda ishlaydimi?

iOS da analogl rolni AVAudioSession orqali boshqariladigan Audio Session o'ynaydi. Mexanizmlar o'xshash: kategoriyalar va variantlar tovushlarning ustma-ust tushishidagi xatti-harakatni belgilaydi. Biroq API va qoidalar tubdan farq qiladi — har bir freymvork o'ziga xos tarzda amalga oshirilgan.

Xulosa

  • Audio Focus — Androidda turli ilovalardan tovushlarning ustma-ust tushishining oldini oluvchi tizim audio arbitridir.
  • Fokus so'rovi AudioFocusRequestCompat orqali durationHint ko'rsatilgan holda amalga oshiriladi: GAIN, TRANSIENT yoki TRANSIENT_MAY_DUCK.
  • OnAudioFocusChangeListener callbacki to'rtta hodisani boshqaradi: GAIN, LOSS, LOSS_TRANSIENT va LOSS_TRANSIENT_CAN_DUCK.
  • AUDIOFOCUS_LOSS da pleer to'xtaydi, TRANSIENT da avtomatik qayta boshlash bilan to'xtatiladi, DUCK da ovozsizlanadi.
  • wasPlayingBeforeLoss bayrog'ini eslab qolish muhim, foydalanuvchining aniq pauzasidan so'ng tinglash qayta boshlanmasligi uchun.
  • Fokusni abandonAudioFocusRequest orqali bo'shatish pauza va pleerni to'xtatishda majburiydir.
  • iOS da Audio Focusning analogi o'z kategoriyalari va rejimlari bilan Audio Session (AVAudioSession) dir.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing