Mantıksal yayın başlatmadan önce bir uygulama, aynı mantıksal akış için kullanılan ses özelliklerini ifade eder. Uygulama, odak noktasına saygı göstermelidir performans kaybına dayanıyor.
Odaklanma isteği gönderilmesi önerilir ancak bu, sistem tarafından zorunlu kılınmaz. Bu nedenle odaklanmayı dolaylı olarak kontrol etme ve çatışmadan kaçınma birincil ses kontrol mekanizması yerine oynatma sırasında kullanılabilir. Araç ses alt sisteminin çalışması için odak sistemine bağlı olmamalıdır.
Etkileşimlere odaklanın
AAOS'yi desteklemek için ses odağı istekleri, önceden tanımlanmış öğelere göre işlenir.
isteğin CarAudioContext
ile mevcut istek arasındaki etkileşimler
odak tutucular. Üç tür etkileşim vardır:
- Özel
- Reddet
- Eşzamanlı
Özel etkileşim
Bu, Android'de en yaygın olarak kullanılan etkileşim modelidir.
Özel etkileşimlerde, aynı anda yalnızca bir uygulamanın odaklanmasına izin verilir.
Bu nedenle, gelen odak isteğine odaklanılırken mevcut odak
odağı kaybeder. Her iki uygulama da medya oynattığından yalnızca bir uygulamanın muhafaza etmesine izin verilir
odaklanacağız. Sonuç olarak, yeni başlatılan uygulamanın odaklanma isteği
AUDIOFOCUS_REQUEST_GRANTED
şu anda müzik çalan uygulama
İstek türüne karşılık gelen kayıp durumuna sahip odak değişikliği etkinliği
ne olduğunu öğreneceğiz.
Etkileşimi reddet
reject (reddet) etkileşimleri sayesinde, gelen istek her zaman reddedilir. Örneğin,
Örneğin, çağrı devam ederken müzik çalmaya çalıştığınızda bunu yapabilirsiniz. Burada
Çevirici, bir arama için ses odağını basılı tutuyorsa ve ikinci bir uygulama odaklamak istiyorsa
müzik uygulaması, müzik çalmak için yanıt olarak AUDIOFOCUS_REQUEST_FAILED
alır
eklemesi gerekir. Odaklama isteği reddedildiğinden odak kaybı gönderilmez
dokunarak ekleyebilirsiniz.
Eşzamanlı etkileşim
AAOS'ye özel olan, eş zamanlı etkileşimlerdir. Bu işlem, ses isteğinde bulunan uygulamalara arabanın diğer uygulamalarla eşzamanlı olarak odaklanma yeteneğine odaklanmasını sağlayın. Örneğin, eş zamanlı etkileşimin gerçekleşmesi için aşağıdaki koşulların karşılanması gerekir. :
Gelen odaklanma isteği, Ses Yöneticisi.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
Geçerli odak tutucu setPauseWhenDucked(true)
Mevcut odak sahibi, ördek etkinliklerini almamayı tercih ediyor
Bu ölçütler karşılanırsa odaklanma isteği
Geçerli odak sahibinde değişiklik olmasa da AUDIOFOCUS_REQUEST_GRANTED
odaklanacağız. Ancak geçerli odak noktası, ördek etkinliklerini almayı veya
bir duraklama olduğunda, geçerli odak noktasının odağı kaybolur,
özel etkileşim.
Eşzamanlı akışları işleme
Eşzamanlı etkileşimin çok sayıda kullanım alanı olsa da içerikleri karıştırırken dikkatli olun.
olduğu konusunda daha da hızlı çalışabilirsiniz. Şunu kesinlikle öneririz:
Eş zamanlı olarak oynatılmasına izin verilen CarAudioContext
öğeleri şuraya yönlendirilmelidir:
farklı çıkış cihazları kullanılıyor.
Eşzamanlı akışlar için ayrı çıkış cihazlarının olması, HAL'nin akarsuları karıştırmadan önce ayırma veya fiziksel akarsuları yönlendirme araçtaki farklı hoparlörlere gönderebilirsiniz. Mantıksal akışlar Android, kazançlar değişmez ve aynı fiziksel akışın bir parçası olarak sunulur.
Örneğin, gezinme ve medya aynı anda sunulduğunda için geçici olarak azaltılabilir (veya küçülebilir). navigasyon talimatları daha net duyulabilir. Alternatif olarak, medya içeriği oynatılmaya devam ederken yayın sürücü tarafındaki hoparlörlere yönlendirilebilir. baştan sona oynayabilirsiniz.
Etkileşim matrisi
Aşağıdaki tabloda, CarAudioService
tarafından tanımlanan etkileşim matrisi gösterilmektedir.
Her satır, geçerli odak sahibinin CarAudioContext
ve her bir
sütunu, gelen isteği temsil eder.
Örneğin, bir müzik medya uygulaması, navigasyon uygulaması olarak odağı tutarken odaklanıyorsa, matris iki etkileşimin eş zamanlı olarak oynanabileceğini gösterir. diğer kriterleri de varsayarak eşzamanlı etkileşimlerin karşılanması gerekir.
Eşzamanlı etkileşimler nedeniyle, birden fazla odak tutucu. Bu durumda, gelen bir odaklanma isteği geçerli odak sahipleriyle birlikte bu aşamanın da dahil edilmesi gerekir. Burada en konservatif etkileşim kazanır. Reddet, ardından özel ve son olarak eşzamanlıdır.
Şekil 1. Ses odağı etkileşim matrisi.
Telefon aramaları sırasında navigasyon
Android 11'de kullanıcıların
Navigasyon ve telefon aramaları arasındaki etkileşim davranışı Ayarlandığında,
android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL
,
gelen NAVIGATION
odak istekleri ile mevcut CALL
arasındaki etkileşim
eşzamanlı olan odağı reddet'e çevirdi. Kullanıcı bunu tercih ederse
navigasyon talimatları aramayı kesintiye uğratmaz, ayarı etkinleştirebilir. Bu
kullanıcı için kalıcıdır ve sonraki odak noktasının kullanıcı için
yeni ayar geçerli olur.
Gecikmeli ses odağı
Android 11'de AAOS, gecikmeli ses odağı isteğinde bulunma desteği ekledi. Bu ile etkileşimleri sırasında, geçici olmayan odaklama isteklerinin geciktirilmesine mevcut odak sahipleri normalde reddedilir. Bir odaktaki değişiklik, geciken isteğe odaklanılan bir durumla sonuçlanır. istek kabul edildi.
Gecikmeli ses odağı istekleriyle ilgili kurallar
Yalnızca geçici olmayan istekler. Geciken istek yalnızca geçici bir sesin uzun süre oynatılmasını önlemek için geçici olmayan kaynakları alakalı hale getirmeyi deneyin.
Bir seferde yalnızca bir istek gecikebilir. Geciken bir istek Gecikmeli bir istek varken yapılan orijinal gecikmeli istek Bir
AUDIOFOCUS_LOSS
değişiklik etkinliği alır ve yeni istek birAUDIOFOCUS_REQUEST_DELAYED
için eşzamanlı yanıt.Ertelenebilir isteklerde
OnAudioFocusChangeListener
Bir defa bir istek geciktiğinde dinleyici, isteği gönderen kişiye istek sonunda onaylanır (AUDIOFOCUS_GAIN
) veya reddedilirse (AUDIOFOCUS_LOSS
).
Gecikmeli odak iste
Gecikmeli olabilecek bir istek oluşturmak için:
AudioFocusRequest.Builder#setAcceptsDelayedFocusGain
hesabını kullan.mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener(); mDelayedFocusRequest = new AudioFocusRequest .Builder(AudioManager.AUDIOFOCUS_GAIN) .setAudioAttributes(mMusicAudioAttrib) .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener) .setForceDucking(false) .setWillPauseWhenDucked(false) .setAcceptsDelayedFocusGain(true) .build();
İstekte bulunurken
AUDIOFOCUS_REQUEST_DELAYED
yanıtını işleme alın:int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest); if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // start audio playback return; } if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) { // audio playback delayed to audio focus listener return; }
İstek geciktiğinde odak işleyici, odaklanılan değişiklikleri işler:
private final class MediaWithDelayedFocusListener implements OnAudioFocusChangeListener { @Override public void onAudioFocusChange(int focusChange) { synchronized (mLock) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: … // Start focus playback case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: … // Pause media transiently case AudioManager.AUDIOFOCUS_LOSS: … // Stop media
Çoklu alt bölge odak yönetimi
Birden fazla ses bölgesi olan araçlarda ses odağı bağımsız olarak yönetilir tıklayın. Dolayısıyla, bir alt bölgeye yapılan istekte veya diğer bölgelerdeki odaklanma sahiplerinin dikkati dağılacaktır. Bu şekilde, ana kabinin odağı arka koltuk eğlence sistemi olduğundan, yapılan değişikliklerle bir alt bölgeye geçirilebilir.
CarAudioService
, tüm uygulamalarda odağı otomatik olarak yönetir. Odak noktası
isteğin ses alt bölgesi, ilişkili UserId
veya UID
tarafından belirlenir
(Ayrıntılar için Ses Yönlendirme başlıklı makaleye göz atın).
Aynı anda birden fazla alt bölgeden ses isteyin
Bir uygulama aynı anda birden fazla alt bölgede ses çalmak isterse istekte bulunmalıdır
AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
her bir alt bölgeye odaklanarak
grup:
//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
zoneId);
AudioAttributes attributesWithZone = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.addBundle(bundle)
.build();
//Create focus request using built attributesWithZone
Bu paket parametresi, istekte bulunanın otomatik ses bölgesini geçersiz kılmasına olanak tanır. eşlemeleri için belirtilen alt bölge kimliğini kullanın. Bu nedenle, bir uygulama Farklı ses bölgeleri için ayrı istekler.
HAL ses odağı
Android 11'den itibaren HAL, harici akışlar. İsteğe bağlı olsa da bu API'lerin kullanımı harici seslerin Android ekosisteminde optimum katılımcılar olmasını sağlamak ve sorunsuz bir kullanıcı deneyimi sağlamak için kullanılır.
Hangi seslere öncelik verileceğini HAL belirler. Bu kapsamda, acil durum ve güvenlikle ilgili kritik sesler cihazdan bağımsız olarak HAL'ye ses odağının verilip verilmediğini ve ve HAL, ses odağını kaybetse bile uygun şekilde çalınmalıdır. Aynı durum resmi düzenlemelerin gerektirdiği sesler.
HAL, oyun sırasında Android akışlarını proaktif olarak ve uygun şekilde kapatmalıdır net bir şekilde duyulmasını sağlamak için acil durum veya güvenlik açısından kritik sesler.
Ses Kontrolü@2.0
AudioControl HAL sürüm 2.0 şu yeni API'leri sunmaktadır:
API | Amaç |
---|---|
IAudioControl#registerFocusListener |
IFocusListener örneğini
AudioControl HAL. Bu dinleyici, HAL'nin ses isteğinde bulunmasını ve ses kaydını bırakmasını sağlar
odaklanacağız. HAl,ICloseHandle
Android'e giderek dinleyicinin kaydını iptal edebilirsiniz. |
IAudioControl#onAudioFocusChange |
HAL tarafından yapılan odaklanma isteklerine yönelik durum değişikliklerini HAL'ye bildirir
İlk yanıtlar da dahil olmak üzere IFocusListener aracılığıyla
odaklanma istekleri. |
IFocusListener#requestAudioFocus
| Belirli bir kullanım, alt bölge kimliği ve ve odak kazancı türü. |
IFocusListener#abandonAudioFocus |
Belirtilen kullanım ve alt bölge için mevcut HAL odağı isteklerini iptal eder Kimlik |
HAL'ye aynı anda birden çok odaklama isteği gönderilebilir, ancak bu istek tek bir HAL ile sınırlıdır istek sayısı ve alt bölge kimliği eşlemesi sayısı. Android, HAL'yi hemen varsayar bir istek yapıldıktan sonra bir kullanım için ses çalmaya başlar ve o odağı terk edene kadar devam eder.
registerFocusListener
dışında bu istekler oneway
Android, odaklanma isteği işlenirken HAL'yi ertelemez. HAL,
dikkatinizi vermek için zaman kaybetmeyin. Bu kısım isteğe bağlıdır.
ses odağındaki değişiklikleri dinlemesi ve bunlara yanıt vermesi için
IAudioControl#onAudioFocusChange
OEM araç ses odak hizmeti
Android 14'te AAOS, aşağıdakileri sağlamak için araba OEM eklenti hizmetlerini kullanıma sundu: yapılandırılabilirlik özellikleri var. Örneğin, Car Audio Plugin Service (Araç Ses Eklentisi Hizmeti) Bu hizmet, OEM'lerin araç sesi tarafından kesilen odak isteklerini yönetmesine olanak tanır. geliştirmenizi sağlar. Bu, OEM'lere gerektiği şekilde odağı yönetme konusunda daha fazla esneklik sağlar tarafından kontrol edilmesi anlamına gelir. Bu nedenle, ses odağı etkileşimi ve bölgeden bölgeye değişiklik gösterir. Ses odağının temel prensibi uygulamaların daha iyi yönetim sesi için odaklanmayı istemesi gerekir. kullanarak kullanıcı deneyimini iyileştirebilirsiniz. Genel olarak, işitsel reklamlar için belirli kurallar geçerli olmaya devam eder. uygulamalar tarafından odaklanma isteği:
Ayakta değilken yüksek öncelikli ses odağı (telefon görüşmesi, acil durum uyarısı veya güvenlik bildirimi) kullanan uygulamalar ses odaklanmayı imkânsız kılıyor.
Medya odağı etkin durumdayken:
Arama kullanımı odağını isteyen uygulamalar aramayı iki şekilde de alabilir senkronize edebilirsiniz.
Navigasyon kullanımı odağı isteyen uygulamalar navigasyonu alabilmelidir odaklanabillirsiniz.
Asistan kullanım odağı isteyen uygulamalar, kullanım odağını alabiliyor olmalıdır elde edebilirsiniz.
Yüksek öncelikli ses odağı ayaktayken (telefon görüşmesi, veya güvenlik bildirimi) etkin olduğundan emin olun. Gecikmeli ses odağı isteği, gerektiği şekilde verilmelidir veya geciktirilmelidir.
Yukarıdaki öneriler olası her durumu içermez, ancak izin isteyen uygulamalara yardımcı olabilir. odaklanmayı ve odaklanmayı kolaylaştırır. Yüksek olsa bile öncelikli sesler etkin, gecikmeli odaklanma istekleri yine de dikkate alınmalıdır ve yüksek öncelikli ses durduğunda odaklanabilmelidir.