Android 10'da car_audio_configuration.xml
, Android 10'un yerini alır
car_volumes_groups.xml
ve IAudioControl.getBusForContext
.
Yeni yapılandırma dosyasında, alt bölgelerin listesi tanımlanır. Her alt bölgede bir veya daha fazla bölge vardır
ses seviyesi gruplarına ayırabilir ve her cihazın
o bölge içinde yönlendirilmelidir. Tüm bağlamların
emin olmanız gerekir.
Ses yönlendirmeyi yapılandırma
Genellikle tedarikçi firma bölümünde bulunan ses politikası dosyaları,
kartın ses donanımı yapılandırmasını gözden geçirin. Şurada referans verilen tüm cihazlar:
car_audio_configuration.xml
,
audio_policy_configuration.xml
.
AAOS yönlendirmesini etkinleştirme
AAOS tabanlı yönlendirmeyi kullanmak için
true
öğesine audioUseDynamicRouting
işareti:
<resources> <bool name="audioUseDynamicRouting">true</bool> </resources>
false
itibarıyla yönlendirme ve CarAudioService
yapılandırmanın büyük bir kısmı devre dışı bırakılacak ve
işletim sistemi varsayılan AudioService
davranışına geri döner.
Birincil alt bölge
Varsayılan olarak tüm sesler birincil alt bölgeye yönlendirilir. Yalnızca
benzersiz bir birincil alt bölge olmalıdır; bu alt bölge, yapılandırmada
isPrimary="true"
Örnek yapılandırma
Örneğin, bir aracın birincil bölge ve arka koltuk olmak üzere iki bölgesi olabilir.
eğlence sistemidir. Böylece, olası bir car_audio_configuration.xml
şu şekilde tanımlanır:
<audioZoneConfiguration version="2.0"> <zone name="primary zone" isPrimary="true"> <volumeGroups> <group> <device address="bus0_media_out"> <context context="music"/> <context context="announcement"/> </device> <device address="bus3_call_ring_out"> <context context="call_ring"/> </device> <device address="bus6_notification_out"> <context context="notification"/> </device> <device address="bus7_system_sound_out"> <context context="system_sound"/> <context context="emergency"/> <context context="safety"/> <context context="vehicle_status"/> </device> </group> <group> <device address="bus1_navigation_out"> <context context="navigation"/> </device> <device address="bus2_voice_command_out"> <context context="voice_command"/> </device> </group> <group> <device address="bus4_call_out"> <context context="call"/> </device> </group> <group> <device address="bus5_alarm_out"> <context context="alarm"/> </device> </group> </volumeGroups> </zone> <zone name="rear seat zone" audioZoneId="1"> <volumeGroups> <group> <device address="bus100_rear_seat"> <context context="music"/> <context context="navigation"/> <context context="voice_command"/> <context context="call_ring"/> <context context="call"/> <context context="alarm"/> <context context="notification"/> <context context="system_sound"/> <context context="emergency"/> <context context="safety"/> <context context="vehicle_status"/> <context context="announcement"/> </device> </group> </volumeGroups> </zones> </audioZoneConfiguration>
Burada birincil alt bölge, bağlamları farklı cihazlara ayırmıştır. Bu durumda,
farklı post işleme efektleri uygulamak ve her cihaz çıkışına karıştırmak için HAL
cihazın donanımını kontrol edin. Cihazlar dört ses düzeyi grubuna göre düzenlenmiştir:
medya, navigasyon, aramalar ve alarmlar. Sistem,
useFixedVolume
, ardından her grubun ses düzeyleri aktarılacak
bu cihazların çıkışlarına uygulamak üzere HAL'ye ekleyin.
İkincil alt bölgede, beklenen çıkış tek bir çıkış cihazı üzerinden yapılır. Bu örnekte, tüm kullanımlar tek bir cihaza ve ses düzeyi grubuna yönlendirilir. basitliklerini gösteriyor.
yolcu bölgesi ses yapılandırması
Android 11'de car_audio_configuration.xml
,
audioZoneId
ve occupantZoneId
olmak üzere iki yeni alanı tanıtıyoruz.
İlki olan audioZoneId
, alt bölge yönetimini daha iyi kontrol etmek için kullanılabilir.
Diğer yandan occupantZoneId
, User-ID'ye dayalı yapılandırmalar için kullanılabilir.
yönlendirme.
Bu yeni alanları kullanmak için car_audio_configuration.xml
'nin V2'si
gereklidir. Yukarıdaki ses yapılandırması yeniden gözden geçiriliyor, ancak
yolcu bölgesi kimliği ve ses bölgesi kimliği eşlemesi, ses düzeyi olmayan yeni yapılandırma
Grup tanımları şu şekilde ayarlanabilir:
<audioZoneConfiguration version="2.0"> <zone name="primary zone" isPrimary="true" occupantZoneId="0"> ... </zone> <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1"> ... </zone> </zones> </audioZoneConfiguration>
Yukarıdaki yapılandırma, birincil bölge 0'daki yolcu bölgesiyle eşlemeyi tanımlar.
audioZoneId
1-occupantZoneId
1. Genellikle, tüm eşleme
yolcu bölgesi ile ses bölgesi arasındaki eşleme yapılandırılabilir. Ancak eşleme bire bir olmalıdır.
Bu iki yeni alanı tanımlayan kurallar şunlardır:
- Birincil alt bölgenin
audioZoneId
değeri her zaman sıfırdır audioZoneId
veoccupantZoneId
numaraları tekrarlanamazaudioZoneId
veoccupantZoneId
yalnızca bire bir eşlemeye sahip olabilir
Uygulama UID'si üzerinden yönlendirme
Uygulamaların izin verebilmesi için bir dizi gizli API, 10 API'de CarAudioManager
kullanıma sunuldu
ses bölgelerini ve odağı sorgulamak ve ayarlamak için kullanılır.
int[] getAudioZoneIds(); int getZoneIdForUid(int uid); boolean setZoneIdForUid(int zoneId, int uid); boolean clearZoneIdForUid(int uid);
Yukarıdaki API'ler, birinci taraf uygulamasının, ses yönlendirmesine dayalı olarak
bir kimliği kullanır. Bu nedenle, hem ses bölgesi kimliği hem de uygulamanın UID'si
çok önemlidir. Bu bilgiler sağlandığında, ses yönlendirmesi
CarAudioManager#setZoneIdForUid
API.
Uygulama için alt bölgeleri değiştirme
Varsayılan olarak, tüm sesler birincil bölgeye yönlendirilir. Bir uygulamayı
farklı bir alt bölgeye yönlendirildiyse CarAudioManager#setZoneIdForUid
öğesini kullanın:
// Find zone to play int zoneId = ... // Find application's uid Int uid = mContext.getPackageManager() .getApplicationInfo(mContext.getPackageName(), 0) .uid; if (mCarAudioManager.setZoneIdForUid(zoneId, info.uid)) { Log.d(TAG, "Zone successfully updated"); } else { Log.d(TAG, "Failed to change zone"); }
K Not: Akışlar ve odak, bölgeleri dinamik olarak değiştiremez. Dolayısıyla, oynatmanın durdurulması ve bölgeleri değiştirmek için yeniden odaklanılması gerekir.
User ID ile Yönlendirme
Bir uygulamanın UID tabanlı yönlendirmesi, her uygulamanın
her uygulama için ses yönlendirmesinin önceden tanımlanmasını da gerektirir.
ses odağı isteyen ve ses çalan uygulamaya bağlanıyor. Bu sorunun etkisini azaltmak için:
üçüncü taraf uygulamalarının değişiklik yapmadan ses çalmasını daha da kolaylaştırabilir,
CarAudioService
, tanımlamak için araç yolcu bölgesini ve ses bölgesi eşlemesini kullanır
yönlendirmesi de buna dahildir. Bu sayede, bir kullanıcı yolcu bölümüne giriş yaptığında araba sesi
bilgi verilir. Bu sinyalle, ses odağı yönetimi ve yönlendirmesi otomatik olarak
yapılandırıldı.
Uygulamaların UID tabanlı yönlendirmesi yine kullanılabilir ancak
Kullanıcı kimliği yönlendirmesi. Yani, yolcu bölgesi ile araç ses bölgesi eşlemesi
tanımlandığında, UID tabanlı yönlendirme devre dışı bırakılır ve
CarAudioManager#setZoneidForUid
hata verir.
Ses yönlendirme ve odak yönetimi, yolcu bölgesi ile basitleştirilmiştir
yönetiminde bir yolcu bölgesine atanması gerekir. Bu işlem,
(CarOccupantZoneManager#assignProfileUserToOccupantZone
) kullanarak. Bu
API, kullanıcıları yönetmek için izin gerektirir. Şu anki beklenti, OEM'lerin
alt bölge atamasına bir tür sistem arayüzü aracılığıyla kullanıcı tarafından izin verilmesi. Bu tamamlandıktan sonra başvuru
başlatma, ses yönlendirme ve odak yönetiminin tümü kullanıcı için otomatik olarak yapılandırılır.
set PreferredDevice ile yönlendirme
Yukarıdaki değişikliklerin yanı sıra Android 11'de çıkış cihazlarını sorgulamak için yeni bir API de bulunuyor. her alt bölge ile ilişkili, CarAudioManager#getExitDeviceForUsage(int zoneId, int kullanımı).
API, belirli bir alt bölge ve ses özelliğine yönelik bir çıkış cihazını sorgulamak için kullanılabilir.
bazı yolları da görmüştük. Bu şekilde, birinci taraf uygulamaları sesi kullanarak veya
Oynatıcının setPreferredDevice
API'si kullanılıyor. İlgili içeriği oluşturmak için kullanılan
getOutputDeviceForUsage
API için gerekenler
PERMISSION_CAR_CONTROL_AUDIO_SETTINGS
ve bir sistem API'sidir. Aşağıda bir
belirli bir bölge için medya cihazını bulma ve bu cihaza yönlendirme örneği
(setPreferredDevice
API) kullanıyor.
audioZoneId = ... ; mediaDeviceInfo = mCarAudioManager .getOutputDeviceForUsage(audioZoneId, AudioAttributes.USAGE_MEDIA); … mPlayer.setPreferredDevice(mediaDeviceInfo);