Audio Focus: kavramı, modları ve Android'de yönetimi

Yazar: IT Sectr Yayınlanma: 2026-05-23 Okuma süresi: 8 dk

Audio Focus, birden fazla uygulama tarafından ses çıkışının eşzamanlı kullanımını düzenleyen bir Android mekanizmasıdır. Seslerin üst üste binmesini önler: bir uygulama oynatmayı başlattığında, sistem otomatik olarak diğerini kısar veya duraklatır. Android Developer Guide, 2026'ya göre, Audio Focus ses oynatan tüm uygulamalar için zorunludur — onsuz Google Play güncellemeyi reddedebilir.

Önemli Noktalar

  • Audio Focus, uygulamalar arasında ses üst üste binmesi olmadan ses oynatmayı koordine etmek için bir sistem mekanizmasıdır.
  • Odak talebi, oynatma türü ve süresi belirtilerek AudioManager.requestAudioFocus() aracılığıyla yapılır.
  • Sistem, AudioManager.OnAudioFocusChangeListener aracılığıyla AUDIOFOCUS_GAIN, LOSS ve DUCK kodlarıyla odak değişikliklerini bildirir.
  • Auto Resume — AUDIOFOCUS_LOSS alındığında uygulama oynatmayı duraklatmalı ve AUDIOFOCUS_GAIN'de devam etmelidir.
  • Android 12+, odak talebi oluşturmak için AndroidX'ten AudioFocusRequestCompat kullanımını gerektirir.

Audio Focus Nedir?

Audio Focus, Android'de merkezi bir ses hakem sistemidir. Bir uygulama odak talep ettiğinde, sistem aktif bir odak “sahibi” olup olmadığını kontrol eder ve sahibine kayıp bildirimi gönderir. Sahibi, odak türüne bağlı olarak sesi kısabilir (duck), oynatmayı duraklatabilir veya yok sayabilir.

Android 8.0'den önce, odak AudioManager.requestAudioFocus(callback, stream, durationHint) aracılığıyla yönetiliyordu. Android 8.0'den itibaren, talep türünü ve otomatik odak geri yüklemeyi belirleme yeteneği ekleyen AudioFocusRequest tanıtıldı. Android 12'de mekanizma güçlendirildi — Google Play'de yayınlanmak için tüm medya oynatıcıları odağı doğru şekilde işlemelidir.

Google I/O 2024'e göre, ses uygulaması incelemelerinde kullanıcı şikayetlerinin yaklaşık %15'i ses üst üste binmesiyle ilgilidir. Doğru Audio Focus uygulaması bu sorunu çözer ve dinleme süresinde kullanıcı deneyimini %30 iyileştirir.

Audio Focus ve Medya Oynatma

Audio Focus'un oynatmayı otomatik olarak kontrol etmediğini anlamak önemlidir. Sadece uygulamayı odak olayları hakkında bilgilendirir. Uygulama kendisi karar verir: oynatıcıyı duraklatmak, sesi kısmak veya oynatmaya devam etmek. Sistem zorlamaz — bu mimari karar geliştiriciye bırakılmıştır.

İstisna, navigasyon uygulamalarıdır (Google Maps, Yandex Maps). AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK odak türünü talep edebilirler, burada mevcut oynatıcının sesi kısılırken sesli yönlendirmeler üstünde çalar. Yönlendirme bittiğinde, oynatıcı otomatik olarak sesi geri yükler.

Android'de Audio Focus Nasıl Çalışır

Sistem, tek bir aktif ses odağı sahibini korur. Yeni bir uygulama odak talep ettiğinde, sistem önceliği belirler ve mevcut sahibine bir olay gönderir. Mevcut sahibi olayı yok sayar ve yüksek sesle oynatmaya devam ederse, sistem herhangi bir yaptırım uygulamaz — sorumluluk tamamen oynatıcıya aittir.

Odak talebi, sisteme tahmini süreyi bildiren bir durationHint parametresi içerir: AUDIOFOCUS_GAIN (uzun oynatma — müzik, podcast), AUDIOFOCUS_GAIN_TRANSIENT (kısa süreli — bildirim sesi, navigasyon), AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK (mevcut oynatıcıyı kısma izni ile kısa süreli).

Odak kaybında, uygulama üç koddan birini alır: AUDIOFOCUS_LOSS (uzun süreli kayıp — başka bir uygulama müzik başlattı), AUDIOFOCUS_LOSS_TRANSIENT (geçici kayıp — arama, bildirim), AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK (ses kısma olasılığı ile geçici kayıp). Her kod kendi tepkisini gerektirir.

Audio Focus Olay Zinciri

Bir kullanıcı A uygulamasında müzik dinliyor. Bir arama geliyor — B uygulaması (telefon) AUDIOFOCUS_GAIN_TRANSIENT talep ediyor. Sistem, A uygulamasına AUDIOFOCUS_LOSS_TRANSIENT gönderiyor. Oynatıcı duraklıyor. Arama bittikten sonra, B uygulaması odağı serbest bırakıyor, sistem AUDIOFOCUS_GAIN aracılığıyla A uygulamasını bilgilendiriyor — oynatıcı oynatmaya devam ediyor. Tüm zincir 50 ms'den az sürer.

Audio Focus Talep Türleri ve Modları

Doğru durationHint'i seçmek, Audio Focus'u uygularken anahtar karardır. Yanlış tür seçimi, ses üst üste binmesine, gereksiz oynatıcı durmasına veya kullanıcı rahatsızlığına yol açar.

Talep TürüSenaryoSahibin Tepkisi
AUDIOFOCUS_GAINMüzik, podcast başlatmaAUDIOFOCUS_LOSS — oynatıcı durmalı
AUDIOFOCUS_GAIN_TRANSIENTArama, sesli bildirimAUDIOFOCUS_LOSS_TRANSIENT — duraklat
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKGPS yönlendirmesi, kısa sinyalAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK — sesi kıs
AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVESesli arama, kayıtAUDIOFOCUS_LOSS — tam durma

AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK Özellikleri

Duck, ikincil bir ses çalarken ana oynatıcının ses seviyesinin geçici olarak %20–30'a düşürülmesidir. Android, AudioManager.adjustSuggestedStreamVolume aracılığıyla manuel ducking için bir API sağlar, ancak çoğu oynatıcı ducking'i kendi yöntemleriyle uygular. Android Belgeleri'ne (2026) göre, duck işlemi 3 saniyeden fazla sürmemeli, ardından ses seviyesi geri yüklenmelidir.

Kodda Audio Focus Uygulaması

Audio Focus'u doğru şekilde uygulamak için sırayla üç adımı gerçekleştirmeniz gerekir: bir talep oluşturun, oynatmadan önce odağı talep edin ve bir geri aramada olayı işleyin. AndroidX media'dan AudioFocusRequestCompat kullanımı, tüm Android sürümleriyle uyumluluğu garanti eder.

Audio Focus Talebi Oluşturma ve Yürütme

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

Odak talebi, kullanıcı Play'e her bastığında oynatmayı başlatmadan önce yapılmalıdır. Sonuç AUDIOFOCUS_REQUEST_GRANTED ise — oynatmaya başlayın. DENIED ise — kullanıcıya bir mesaj gösterin veya odak elde edilene kadar oynatmayı erteleyin.

Odak Değişikliği Geri Araması

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

Geri aramada, AUDIOFOCUS_LOSS ve AUDIOFOCUS_LOSS_TRANSIENT arasında ayrım yapmak önemlidir. İlk durumda, oynatıcı otomatik olarak devam etmemelidir — kullanıcı açıkça başka bir ses başlatmıştır. İkincisinde, AUDIOFOCUS_GAIN alındığında otomatik olarak devam edebilir. wasPlayingBeforeLoss bayrağı, oynatmanın geri yüklenmesi gerekip gerekmediğini hatırlamaya yardımcı olur.

Audio Focus'u Serbest Bırakma

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

abandonAudioFocusRequest çağrısı, sisteme uygulamanın artık odağa ihtiyacı olmadığını bildirir. Bunu oynatıcıyı duraklatırken ve durdururken çağırmak önemlidir. Odak serbest bırakılmazsa, AUDIOFOCUS_GAIN talep eden başka bir uygulama LOSS almayacak ve sesler üst üste binecektir.

Ses Odağı Kaybının İşlenmesi

Odak kaybını doğru şekilde işlemek, Google Play incelemesini geçmek için önemli bir gerekliliktir. Yanlış işleme, olumsuz yorumlara yol açar: kullanıcılar, bir arama sırasında veya navigasyon üstünde müziğin çalmaya devam ettiğinden şikayet eder.

AUDIOFOCUS_LOSS alındığında, oynatıcı durmalı ve kullanıcı açıkça Play'e basana kadar devam etmemelidir. AUDIOFOCUS_LOSS_TRANSIENT'te (arama, bildirim), oynatıcı duraklar ve odak geri yüklendiğinde otomatik olarak devam eder. AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK'ta, oynatıcı harici ses çalarken geçici olarak ses seviyesini %20–30'a düşürür.

Android Geliştirici Kılavuzu'na (2026) göre, duck, mevcut AudioTrack ses seviyesini 0.2–0.3 faktörüyle çarparak uygulanmalıdır. AudioManager.setStreamVolume kullanmayın — bu sistem sesini değiştirir ve diğer uygulamaları etkiler. Ducking yalnızca kendi oynatıcı tarafında gerçekleştirilir.

Arama ve Navigasyonun İşlenmesi

Gelen bir aramada, sistem otomatik olarak Telefon uygulaması aracılığıyla AUDIOFOCUS_GAIN_TRANSIENT talep eder. Oynatıcı AUDIOFOCUS_LOSS_TRANSIENT alır ve duraklar. Arama bittikten sonra veya kullanıcı aramayı reddederse, odak geri döner — bir müzik oynatıcısıysa oynatıcı otomatik olarak oynatmaya devam eder.

Navigasyon uygulamaları (Google Maps) için, sesli yönlendirmeler sırasında AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK kullanılır. Oynatıcının sesi 2–3 saniye kısılır, ardından ses seviyesi geri yüklenir. Kullanıcı müzik yerine podcast dinliyorsa, ducking yerine duraklatmak daha iyidir — podcast'lerde her saniye önemlidir.

Tipik Kullanım Senaryoları

Pratikte, geliştiriciler Audio Focus'un farklı davrandığı birkaç standart senaryoyla karşılaşır. Tipik durumlara ve doğru tepkilere bakalım.

  • Müzik + arama — oynatıcı duraklar (AUDIOFOCUS_LOSS_TRANSIENT). Aramadan sonra, kullanıcı oynatıcıyla etkileşime girmediyse otomatik olarak devam eder.
  • Müzik + navigasyon — sesli yönlendirme sırasında oynatıcının sesi kısılır (DUCK). İfade bittikten sonra ses seviyesi geri yüklenir.
  • Kullanıcı başka bir uygulama başlattı — oynatıcı AUDIOFOCUS_LOSS alır ve durur. Yalnızca Play düğmesiyle devam etme.
  • Arka planda video + müzik — video oynatıcı AUDIOFOCUS_GAIN talep eder. Müzik oynatıcı LOSS alır ve durur.
  • Sesli arama (Google Assistant) — uygulama AUDIOFOCUS_LOSS_TRANSIENT alır, duraklar ve asistanın yanıtından sonra otomatik olarak devam eder.

Odak Kaybından Sonra Otomatik Devam

Odak kaybından önce müziğin çalıp çalmadığını hatırlayan bir bayrak uygulamak önemlidir. Kullanıcı kendisi duraklattıysa ve sonra bir arama geldiyse — devam etmeyin. Bayrak, kullanıcının açık duraklatmasında sıfırlanır ve oynatma başladığında ayarlanır.

Google UX araştırmasına (2024) göre, aramadan sonra otomatik devam etme, kullanıcı memnuniyetini %22 artırır. Ancak oynatıcı, kullanıcı zaten bir video izlemeye başladıktan sonra devam ederse — bu rahatsızlığa neden olur. wasPlayingBeforeLoss bayrağı yanlış devam etmeleri önler.

Sıkça Sorulan Sorular

Audio Focus, sesli tüm uygulamalar için zorunlu mu?

Evet, Android 12'den itibaren Google Play, ses oynatan tüm uygulamalar için Audio Focus uygulamasını önerir. Müzik ve Ses kategorisindeki uygulamaların yayınlanmak için uygulaması zorunludur. Yok sayılması, güncellemenin reddedilmesine yol açabilir.

Audio Focus'un doğru çalıştığını nasıl kontrol edebilirim?

Oynatıcınızı başlatın, ardından başka bir ses uygulaması (örneğin YouTube Music) açın. Oynatıcınız duraklamalıdır. Ardından YouTube Music'i kapatın — oynatıcı otomatik olarak devam etmelidir. Duck testi için sesli yönlendirmelerle Google Maps'i kullanın.

Pratikte AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK nedir?

Sistem şöyle der: “Başka bir uygulamanın kısa bir ses çalması gerekiyor — oynatıcınızın sesini kısın.” Bu, sesli yönlendirmeler ve kısa bildirimler için idealdir. Harici ses bittikten sonra manuel müdahale olmadan ses seviyesi geri yüklenir.

Audio Focus kaybı talebini reddedebilir miyim?

Resmi olarak evet — sistem zorlamaz. Ancak pratikte bu ses üst üste binmesi anlamına gelir. Kullanıcı aynı anda müzik ve arama duyar, bu da olumsuz bir deneyime yol açar. Google, AUDIOFOCUS_LOSS'u her zaman oynatıcıyı durdurarak işlemeyi önerir.

Audio Focus, Android dışındaki platformlarda çalışır mı?

iOS'ta, eşdeğer rolü Audio Session üstlenir ve AVAudioSession aracılığıyla yönetilir. Mekanizmalar benzerdir: kategoriler ve seçenekler, ses üst üste binmesi sırasında davranışı tanımlar. Ancak, API ve kurallar önemli ölçüde farklılık gösterir — her çerçeve kendi yolunda uygulanmıştır.

Özet

  • Audio Focus, Android'de farklı uygulamalar arasında ses üst üste binmesini önleyen sistem ses hakemidir.
  • Odak talebi, AudioFocusRequestCompat aracılığıyla durationHint: GAIN, TRANSIENT veya TRANSIENT_MAY_DUCK belirtilerek yapılır.
  • OnAudioFocusChangeListener geri araması dört olayı işler: GAIN, LOSS, LOSS_TRANSIENT ve LOSS_TRANSIENT_CAN_DUCK.
  • AUDIOFOCUS_LOSS'te oynatıcı durur; TRANSIENT'te — otomatik devamla duraklama; DUCK'ta — ses kısma.
  • Kullanıcının açık duraklatmasından sonra devam etmeyi önlemek için wasPlayingBeforeLoss bayrağını izlemek önemlidir.
  • abandonAudioFocusRequest aracılığıyla odağı serbest bırakmak, oynatıcıyı duraklatırken ve durdururken zorunludur.
  • iOS'ta Audio Focus'un eşdeğeri, kendi kategorileri ve modlarıyla Audio Session (AVAudioSession)'dur.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun