Android 14'teki yeni araba OEM eklenti hizmetleri, bazı araba bileşenlerinin yapılandırılmasını sağlar. Özellikle ses için, OEM'lerin AAOS cihazlarda ses yönetimini esnek bir şekilde yapılandırmasına olanak tanıyan üç yeni eklenti hizmeti kullanıma sunuldu:
- Ses odağı kontrolü
- Ses düzeyi ve sesi kapatma kontrolü
- Sesi kısma kontrolü
Araba eklentisi hizmet mimarisi
Aşağıdaki şekilde, araç hizmetleri ve bunların OEM araç hizmetiyle ilişkisine dair genel bir bakış sunulmaktadır. Uygulama süreçlerine ve araç servisi sürecine benzer şekilde, OEM araç servisi süreci de kendi süreç alanını kullanır.
Araba hizmeti, config_oemCarService içinde tanımlanan bileşeni bularak OEM araba hizmetini başlatır. Yapılandırma boşsa OEM hizmeti yoktur ve herhangi bir hizmet başlatılmaz. Bileşen, OemCarService'i genişletmelidir.
Araba ses hizmeti, araba ses OEM hizmetini edinmeye yönelik API'lerin üzerine yazmalıdır:
public final class OemCarServiceImp extends OemCarService {
@Override
public OemCarAudioFocusService getOemAudioFocusService();
@Override
public OemCarAudioDuckingService getOemAudioDuckingService();
@Override
public OemCarAudioVolumeService getOemAudioVolumeService();
}
Örneğin, packages/services/Car/tests/OemCarServiceTestApp içinde tanımlanan referans test uygulamasına bakın.
Hizmet, araç servisi tarafından başlatılsa da araç ses hizmetinde kullanılabilen izinleri otomatik olarak devralmaz. Bu nedenle, OEM hizmetleri tarafından gerekli olan tüm izinler uygun mekanizma kullanılarak alınmalıdır. Örneğin, packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml konusuna bakın.
OEM hizmet mimarisine sahip araç ses sistemi servisi
AAOS'te araba ses hizmeti şu işlemleri yönetir:
- Ses yönlendirme
- Ses odağı
- Sesi kısma
- Ses düzeyi ve sesi kapatma
Android 14'ten önce bu davranış büyük ölçüde statikti ve yalnızca çok sınırlı sayıda durum için ayarlardan değiştirilebiliyordu. Android 14, araç ses hizmetinin aşağıdakileri yöneten OEM tanımlı bir bileşenle iletişim kurmasını sağlayan bir mekanizma sunar:
- Ses odağı
- Sesi kısma
- Ses düzeyi ve sesi kapatma
Aşağıdaki şekilde, araç ses sistemi hizmeti ve araç OEM hizmeti için basitleştirilmiş bir mimari gösterilmektedir. Araba ses hizmeti, ses davranışını yönetmek için araba OEM ses hizmetini çağırabilen farklı kancalar tanımlar. Bu durum yalnızca ilgili OEM araç ses hizmeti bileşeni tanımlanmışsa gerçekleşir. Aksi takdirde, araç ses hizmeti varsayılan davranışı kullanır.
Araç ses hizmetinin ve araç OEM ses hizmetinin her zaman senkronize olmasını sağlamak için araç ses hizmeti, her aramada ses yığınının mevcut durumunun gerekli kısımlarını araç OEM ses hizmetine iletir. Örneğin, araba ses hizmeti ses odağını değerlendirme isteğini engellediğinde yığının mevcut durumunu araba OEM ses hizmetine iletir. Mevcut durum, mevcut odak sahibi ve mevcut odak kaybedenleri içerir. Odaklanma kaybedenler, yığında yer almaya devam eden ancak geçici olarak odaklanmayı kaybetmiş odaklanma istekleridir.
Araç ses hizmeti, araçtaki tüm ses etkinliklerini yönetmelidir. Araba ses hizmeti, ses davranışının bazı kısımlarını yönetmiyorsa araba OEM ses hizmetine sunulan bilgiler eksiktir. Örneğin, bir OEM kendi ses odağı politikasını kaydederek araç hizmetindeki ses odağı işleme özelliğinin üzerine yazarsa araç ses hizmeti, araç OEM ses hizmetine eksiksiz bilgi sağlayamaz. Bu durum, otomobil OEM ses hizmetinin karar verme yeteneğini etkileyebilir. Bunun nedeni, otomobil ses hizmeti tarafından görünmeyen bilgilerin eksik olabilmesidir.
Araç ses sistemi hizmeti, işlem yapmak için OEM araç hizmetlerini çağırır. Bu çağrılar, işlemler arası iletişim (IPC) gerektiren işlemler arasında yapılır. IPC, her çağrıya gecikme ekler. OEM hizmetinde gecikmeyi en aza indirmek önemlidir.
OEM hizmetine yapılan araç ses hizmeti çağrıları engellendiğinden OEM hizmeti, doğrudan API değerlendirmelerinde araç ses hizmetini çağırmamalıdır. Bunun yerine, araç ses hizmeti gerekli bilgileri sağlar. Böylece iki işlem arasındaki aramaların yalnızca tek yönde ilerlemesi gerekir.
OEM araç ses hizmeti tanımları
OEM araç ses odağı hizmeti
Aracın ses hizmeti, bir ses politikası odak dinleyicisi kaydederek uygulamalardan gelen ses odağı isteklerini yönetir. Araba ses hizmeti, odak davranışını statik bir etkileşim matrisine göre yönetme mekanizmasına sahiptir. Matris üç farklı etkileşim türünü tanımlar:
Eşzamanlı etkileşim Odaklanma sahipleri aynı anda odaklanmaya devam edebilir.
Özel etkileşimler. Gelen odak isteği, mevcut odak sahibinden odağı alır.
Etkileşimi reddet Mevcut odak sahibi temel alınarak gelen odak isteği reddedildi.
Bu, bazı otomotiv kullanım alanları için yeterli olsa da OEM gereksinimleri nedeniyle farklılık gösterebilecek tüm etkileşim ihtiyaçlarını karşılamaz. Bu amaçla OemCarAudioFocusService özelliğini kullanıma sunuyoruz:
public interface OEmCarAudioFocusService {
OemCarAuddioFocusResults evaluateAudioFocusRequest(
OemCarAudioFocusEvaluationRequest request);
void notifyAudioFocusChange(
List<AudioFocusEntry> holder,
List<AudioFocusEntry> losers, int zoneId);
}
API evaluateAudioFocusRequest, değerlendirilmesi gereken bir ses odağı isteği olduğunda araba ses hizmetinden çağrılır. Sonuçların döndürülmesi için engelleme yapan iki yönlü bir API'dir. İstek, ses yığınının mevcut durumuyla ilgili bilgileri içerir:
Bu bilgiler, newFocusRequest ile focusHolders'deki mevcut odaklanma sahipleri ve focusLosers'deki mevcut odaklanma kaybedenler karşılaştırıldığında değerlendirme yapmak için kullanılabilir. API, sonuçları döndürmelidir:
class OemCarAudioFocusResult {
int audioZoneId;
int audioFocusEvaluationResults;
AudioFocusEntry focusResult;
List<AudioFocusEntry> newLosers;
List<AudioFocusEntry> newlyBlocked;
}
Bu, audioFocusEvaluationResults içindeki gerçek değerlendirme sonuçlarıyla ilgili bilgileri içerir. Bu bilgiler, mevcut isteğin kabul edilip edilmediğini, geciktirilip geciktirilmediğini veya başarısız olup olmadığını gösterir. Mevcut odak yığınında yapılacak değişiklikler, yığın değişikliğinin niteliğine bağlı olarak newLosers ve newlyBlocked girişlerinde ayarlanmalıdır.
newLosers, daha önce odaklanılmış ancak artık kalıcı veya geçici olarak odaklanmayı bırakması gereken girişler içerdiğinde. Kalıcı odak kaybedenler, ses odağı yığınından daha da uzaklaştırılır. Geçici odak kaybedenler ise odağı yeniden kazanana veya orijinal odak isteğinde bulunan tarafından bırakılana kadar mevcut odak kaybedenler yığınına taşınır. Her durumda, isteklerin odak dinleyicisi, odak kaybıyla ilgili bir bildirim alır.
newlyBlocked listesi, daha önce odak kaybedenler listesinde yer alan ancak yeni giriş tarafından engellenen girişleri içerir. Engelleme kalıcı veya geçici olabilir. Kalıcı odak engellemesinde giriş yığından kaldırılır ve odak kaybı, odak dinleyicilerine gönderilir. Odaklanmanın geçici olarak kaybolması durumunda giriş, odaklanmayı kaybedenler yığınında kalır ancak engellenenler listesine yeni bir odaklanma engelleyici eklenir. Daha önce ilk engellendiğinde gönderildiği için odaklanma kaybı gönderilmez. Tüm mevcut engelleyiciler kaldırıldığında istek nihayet engellenmeyecek veya odaklanma bırakılırsa istek yığından kaldırılacaktır.
İkinci API olan notifyAudioFocusChange, her ses odağı isteğinde veya bırakma işleminde çağrılan tek yönlü bir API'dir. API, genellikle OEM araç ses hizmetinin davranışını etkileyebilecek odak değişiklikleri hakkında OEM hizmetini bilgilendirmek için kullanılır.
Odak değerlendirmesi yönergeleri
AAOS'te ses odaklanması, ses oynatmayı yönetmek ve kullanıcıya optimum deneyim sunmak için hangi uygulamanın uyması gerektiğini belirlemek için kullanılır. Bu nedenle, OEM eklenti hizmeti bir ses odağı isteğini yönetirken aşağıdakileri göz önünde bulundurmalıdır:
Yüksek öncelikli ses odağı (ör. telefon görüşmesi, acil durum veya güvenlik) yoksa uygulamalar geçici ya da kalıcı olarak ses odağı kazanabilmelidir.
Medya odağı etkin durumdayken istekte bulunan uygulamalar:
Arama kullanımına odaklanma, eşzamanlı veya özel olarak odaklanma alabilmelidir.
Gezinme kullanımına odaklanılmalıdır. Odak, eşzamanlı veya ayrı ayrı alınabilmelidir.
Asistan kullanımına odaklanılmalıdır. Odak, eşzamanlı veya ayrı ayrı alınabilmelidir.
Yüksek öncelikli ses odağı (ör. telefon araması, acil durum uyarısı veya güvenlik uyarısı) uygulamaları etkin durumdayken, gelen gecikmeli ses odağı istekleri gerektiği şekilde kabul edilmeli veya geciktirilmelidir.
Yukarıdaki öneriler kapsamlı olmasa da odaklanma isteğinde bulunan uygulamaların, etkin yüksek öncelikli ses olmadığında odaklanmayı elde edebilmesini sağlamaya yardımcı olabilir. Yüksek öncelikli sesler etkin olsa bile, gecikmeli odaklanma isteklerine uyulmaya devam edilmeli ve yüksek öncelikli ses durduğunda odaklanma sağlanabilmelidir.
OEM araba ses seviyesi hizmeti
Araç ses hizmeti, ses seviyesi tuşu etkinliklerini ses sisteminden gelen ses ayarlamalarını dinleyerek veya doğrudan araç giriş hizmetinden gelen ses seviyesi tuşu etkinliklerini dinleyerek yönetir. Her durumda, araba ses hizmetinin varsayılan davranışı, etkin ses oynatıcılar ve ses bağlamı öncelik listesine göre hangi ses grubu değiştirileceğini belirlemektir.
İki birim öncelik listesi sunuyoruz. İlk listede tüm ses bağlamları bu sırayla değerlendirilir. Liste azalan düzende sunulur. En yüksek öncelik en üstte, en düşük öncelik ise en altta yer alır. Örneğin, hem navigasyon sesi hem de müzik sesi aynı anda etkinse ses tuşu etkinliği sırasında navigasyon sesi değiştirilir.
- Gezinme
- Telefon et
- Müzik
- Duyuru
- Sesli komut
- Aramada zili çaldırılacak cihaz
- Sistem sesi
- Güvenlik
- Alarm
- Bildirim
- Araç durumu
- Acil durum
Ses seviyesi tuşu etkinlik yönetimini daha az karmaşık hale getirmek için araba ses hizmetinde ikinci bir ses bağlamı öncelik listesi bulunur:
- Telefon et
- Medya
- Duyuru
- Sesli komut
Bu liste de azalan düzende sunulur. Bu ikinci listenin amacı, daha yaygın seslerin önemli etkinlikler aracılığıyla değiştirilmesine olanak tanımaktır. Kısa süreli sesler gibi nadir sesler yalnızca ses ayarları kullanıcı arayüzü üzerinden yönetilebilir.
Sesin gerçek sürümü, audioVolumeAdjustmentContextsVersion yapılandırmasıyla ayarlanabilir. Yapılandırma 1 veya 2 olarak ayarlanabilir (varsayılan olarak 2 kullanılır).
Android 14'te, ses yönetimiyle ilgili daha fazla esneklik sağlamak için OemCarAudioVolumeService özelliği kullanıma sunulmuştur:
public interface OemCarAudioVolumeService {
OemCarvolumeChangeInfo getSuggestedGroupForVolumeChange(
OemCarAudioVolumeRequest request, int volumeAdjustment);
}
OEM araç ses seviyesi hizmetinin, volumeAdjustment ve OemCarAudioVolumeRequest alan tek bir yöntemi vardır:
class OemCarAudioVolumeRequest {
int audioZoneId;
int callState;
List<AudioAttributes> activePlaybackAttributes;
List<AudioAttributes> duckedAttributes;
List<CarVolumeGroupInfo> volumeGroupState;
}
İsteğin activePlaybackAttributes bölümünde etkin ses özellikleri bulunur. duckedAttributes şu anda ses azaltma uygulanan ses özellikleridir. volumeGroupState, birim grubunun mevcut durumunu gösterir. İstek, ses yığınının mevcut durumunu temsil eder ve hangi ses grubu değiştirilmesi gerektiğini belirlemek için kullanılabilir. Sonuçlar OemCarVolumeChangeInfo biçiminde döndürülmelidir:
class OemCarVolumeChangeInfo {
boolean change;
CarVolumeGroupInfo volumeGroupChanged;
}
change Boole değeri, herhangi bir hacmin değişip değişmediğini gösterir. true ise bir değişiklik olduğunu ve hacim grubunun güncellenmesi gerektiğini gösterir. volumeGroupChanged, değiştirilmesi gereken gerçek birim grubudur. Bu grup, API'ye iletilen orijinal volumeAdjustment parametresine göre değiştirilmelidir. Örneğin, sonuçlar gezinme ses grubu için sesin kapatılması gerektiğini gösteriyorsa Boole değeri true olur ve döndürülen ses grubu gezinme ses grubu olmalıdır.
OEM araç ses kısma hizmeti
Araba ses hizmeti, ses odaklanma değişikliklerini izleyerek ve hangi ses cihazlarının sesini kısması gerektiği konusunda AudioControl HAL'ye sinyal göndererek ses kısma işlemini yönetir.
Odak değiştiğinde, bu statik odaklanma kurallarına göre hangisinin odaklanması gerektiğini belirlemek için tüm etkin odak tutucular değerlendirilir:
- Acil durum sesleri, arama sesleri hariç her şeyi kısar
- Güvenlik, acil durum sesleri hariç her şeyi susturur.
- Navigasyon, güvenlik ve acil durum sesleri hariç her şeyi kısar
- Güvenlik, acil durum ve navigasyon sesleri hariç her şeyi kapatır.
- Voice, arama zili seslerini kısar
- Müzik ve duyuruların sesi her şey tarafından kısılmalıdır.
Bu kurallar kapsamlı değildir ve OEM'ler, bu yönergelere göre seslerin nasıl kısılacağını belirlemekten sorumludur. OEM'ler, mevcut koşullara göre bu önerileri daha etkin bir şekilde kontrol edebilir. Android 14'te OemCarDuckingService özelliği kullanıma sunulmuştur:
class OemCarAudioDuckingService {
List<AudioAttributes> evaluateAttributesToDuck(
OemCarAudioVolumeRequest request);
}
Bu API, ses odağı değişikliklerinde araba ses hizmetinden çağrılır. OEM car volume service'te kullanıma sunulan OemCarAudioVolumeRequest özelliğini yeniden kullanır ve hangi özelliklerin gizleneceğiyle ilgili karar vermek için gerekli bilgileri içerir. API'den gelen ses kısma için ses özelliklerinin listesi, mevcut ses durumuyla karşılaştırılır:
Şu anda sesi kısılan ses özelliği:
- Listede, ses kısılmaya devam ediyor
- Listede değil, ses kısma özelliği devre dışı
Ses özelliği şu anda kısılmıyor:
- Listede, eğilmiş
- Listede yok, ses kısma özelliği devre dışı
Ardından araç ses hizmeti, ses özelliklerinin hangi ses çıkışı cihazlarına ait olduğunu belirler ve bunları sırasıyla ses çıkışı cihazı listesine veya ses çıkışı cihazı listesine ekler. Bu, donanım düzeyinde gerekli ses kısma işlemini gerçekleştirmek için nihayetinde AudioControl HAL'ye gönderilir.
Aşağıdaki şekilde, OEM ducking hizmeti kullanıldığında odaklanma isteği için ses azaltma kontrolünün basitleştirilmiş bir sıra şeması gösterilmektedir:
Sıra, bir uygulama herkese açık ses yöneticisi API'leri aracılığıyla Ses odağını yönet isteğinde bulunduğunda başlar. Sonuçları belirlemek için istek, araç ses sistemine yönlendirilir. Ses odağına karar verildiğinde, hangi ses özelliklerinin kısılacağını değerlendirmek için OemCarAudioDuckingService işlevini çağıran araç ses hizmeti tarafından ses kısma özelliği değerlendirilir. evaluateAttributesToDuck API'sinden sonuçlar döndürüldükten sonra, ses seviyesini düşürme işleminin uygulanacağı ses cihazları hesaplanır ve son olarak, ses donanımına ses seviyesini düşürme işlemini uygulamak için bilgiler AudioControl'ye gönderilir.
OEM araç ses sistemi hizmeti referans uygulaması
AAOS, packages/services/Car/tests/OemCarServiceTestApp içinde OEM araba hizmetinin referans uygulamasını sağlar. Bu uygulama, OemCarService, OemCarAudioFocusService, OemCarAudioDuckingService ve OemCarAudioVolumeService'yi uygular. İkincisi için her hizmet, statik bir davranışı yüklemek üzere bir XML dosyası kullanır. Örneğin,
OemCarAudioFocusServiceImp, etkileşim matrisi içeren oem_focus_config.xml öğesini yükler. Matris, evaluateAudioFocusRequest çağrıldığında odaklanma isteğini değerlendirmek için kullanılır.
Referans test uygulamasında hata ayıklama
OEM araç hizmeti test uygulaması, AOSP kaynak kodunun bir parçasıdır. OEM'ler, ihtiyaçlarına göre değişiklik yapabilir. Hata ayıklama için test uygulamasını etkinleştirmek üzere config_oemCarService yapılandırmasını kullanın.
<!-- This is the component name for the OEM customization service. OEM can choose to implement
this service to customize car service behavior for different policies. If OEMs choose to
implement it, they have to implement a service extending OemCarService exposed by car-lib,
and implement the required component services.
If the component name is invalid, CarService would not connect to any OEM service.
Component name can not be a third party package. It should be pre-installed -->
<string name="config_oemCarService" translatable="false">
com.android.car.oemcarservice.testapp/.OemCarServiceImpl
</string>
OEM araç hizmetinin, OEM hizmeti için araç hizmeti dump komutunu kullandığını doğrulamak üzere:
adb shell dumpsys car_service --oem-service
Sonuçlar aşağıdaki çıktıya benzer olabilir:
***CarOemProxyService dump***
mIsFeatureEnabled: true
mIsOemServiceBound: true
mIsOemServiceReady: true
mIsOemServiceConnected: true
mInitComplete: true
OEM_CAR_SERVICE_CONNECTED_TIMEOUT_MS: 5000
OEM_CAR_SERVICE_READY_TIMEOUT_MS: 5000
mComponentName: com.android.car.oemcarservice.testapp/.OemCarServiceImpl
dump bilgilerinin her grubundaki her boole değeri, özelliğin ve hizmetin durumunu belirler. Örneğin, mIsOemServiceReady döküm bilgisi, hizmetin kullanıma hazır olup olmadığını belirtir. Burada true hazır olduğunu, false ise hazır olmadığını gösterir.