Araç ses eklentisi hizmeti

Android 14'teki yeni araba OEM eklenti hizmetleri, bazı araba bileşenlerinin yapılandırılmasına olanak tanır. Özellikle ses için, OEM'lerin AAOS cihazlarında ses yönetimini esnek bir şekilde yapılandırmasına olanak tanıyan üç yeni eklenti hizmeti tanıtıldı:

  • Ses odak kontrolü
  • Ses seviyesi ve sessiz kontrolü
  • Ses Azaltma kontrolü

Araç eklentisi hizmet mimarisi

Aşağıdaki şekil, araç hizmetlerine ve bunların OEM araç hizmetiyle ilişkilerine genel bir bakış sunmaktadır. Uygulama süreçlerine ve araç servis sürecine benzer şekilde, OEM araç servis süreci de kendi süreç alanını kaplar.

resim

Araba servisi, config_oemCarService tanımlanan bileşeni bularak OEM araba servisini başlatır. Yapılandırma boşsa, OEM hizmeti mevcut değildir ve hiçbir hizmet başlatılmaz. Bileşen OemCarService'i genişletmelidir. Araç ses sistemi hizmetinin, araç ses sistemi OEM hizmetini alabilmesi için API'lerin üzerine yazması gerekir:

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ç hizmeti tarafından başlatılsa bile, araç ses hizmeti için mevcut olan izinleri otomatik olarak devralmaz. Bu nedenle, OEM hizmetlerinin gerektirdiği her türlü izin, uygun mekanizmayla alınmalıdır. Örneğin, packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml bakın.

OEM hizmet mimarisiyle araç ses hizmeti

AAOS'ta araç ses hizmeti şu eylemleri yönetir:

  • Ses yönlendirme
  • Ses odağı
  • Sesin kısılması
  • Ses seviyesi ve sessiz

Android 14'ten önce bu davranış büyük ölçüde statikti ve çok sınırlı sayıda durumda olsa da yalnızca ayarlar aracılığıyla değiştirilebiliyordu. Android 14, araç ses hizmetinin aşağıdakileri yöneten OEM tanımlı bir bileşenle iletişim kurması için bir mekanizma sundu:

  • Ses odağı
  • Sesin kısılması
  • Ses seviyesi ve sessiz

Aşağıdaki şekilde araç ses hizmeti ve araç OEM hizmeti için basitleştirilmiş bir mimari gösterilmektedir. Araç ses hizmeti, ses davranışını yönetmek için araç OEM ses hizmetini arayabilecek farklı kancalar tanımlar. İkincisi yalnızca karşılık gelen OEM araç ses hizmeti bileşeni tanımlandığında gerçekleşir. Aksi halde araç ses sistemi hizmeti varsayılan davranışı kullanır.

resim

Araç ses hizmeti ile araç OEM ses hizmetinin her zaman senkronize olmasını sağlamak için, her aramada araç ses hizmeti, ses yığınının mevcut durumunun gerekli kısımlarını araç OEM ses hizmetine iletir. Örneğin, araç ses hizmeti, ses odağını değerlendirme isteğini yakaladığında, yığının mevcut durumunu araç OEM ses hizmetine aktarır. Mevcut durum, mevcut odak sahibini ve mevcut odak kaybedenleri içerir. Odak kaybedenler, hâlâ yığının bir parçası olan ancak geçici olarak odak noktasını kaybeden odak istekleridir.

Araç ses hizmeti, araçtaki tüm ses etkinliğini yönetmelidir. Araç ses hizmeti ses davranışının bazı bölümlerini yönetemiyorsa, araç OEM ses hizmetine sunulan bilgiler eksik demektir. Örneğin, bir OEM, kendi ses odaklama ilkesini kaydederek araç hizmetindeki ses odaklama işleminin üzerine yazarsa, araç ses hizmeti, araç OEM ses hizmetine tam bilgi sağlayamaz. Bu, araç OEM ses hizmetinin göremediği bilgilerden yoksun olabileceğinden, araç OEM ses hizmetinin karar verme yeteneğini etkileyebilir.

Araç ses hizmeti, işlem yapmak için OEM araç hizmetlerini arar. Bu çağrılar, süreçler arası iletişim (IPC) gerektiren süreçler arasında yapılır. IPC her çağrıya gecikme ekler. OEM hizmetindeki 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 aramamalıdır. Bunun yerine araç ses hizmeti, iki süreç arasındaki çağrıların yalnızca tek yönde gitmesi için gerekli bilgileri sağlar.

OEM araç ses hizmeti tanımları

OEM araç ses odaklama hizmeti

Araç ses hizmeti, bir ses politikası odak dinleyicisini kaydederek uygulamalardan gelen ses odaklama isteklerini yönetir. Araç ses hizmeti, statik bir Etkileşim matrisine dayalı olarak odaklanma davranışını yöneten bir mekanizmaya sahiptir. Matris üç farklı etkileşim türünü tanımlar:

  • Eşzamanlı etkileşim. Odak tutucular aynı anda odağı koruyabilirler.

  • Özel etkileşimler. Gelen odak isteği, odağı geçerli odak sahibinden alır.

  • Etkileşimi reddet. Mevcut odak sahibine göre gelen odak isteği reddedildi.

Bu, bazı otomotiv kullanım durumları için yeterli olsa da, OEM gereksinimleri nedeniyle farklılık gösterebilecek tüm etkileşim ihtiyaçlarını karşılamaz. Bunun için OemCarAudioFocusService tanıtıyoruz:

public interface OEmCarAudioFocusService {
    OemCarAuddioFocusResults evaluateAudioFocusRequest(
        OemCarAudioFocusEvaluationRequest request);
    
    void notifyAudioFocusChange(
        List<AudioFocusEntry> holder,
        List<AudioFocusEntry> losers, int zoneId);
}

evaluateAudioFocusRequest API'si, değerlendirilmesi gereken ses odağı talebi olduğunda araç ses hizmetinden çağrılır; sonuçların geri dönmesini engelleyen iki yönlü bir API'dir. İstek, ses yığınının mevcut durumu hakkında bilgi içerir:

Bu bilgi, newFocusRequest focusHolders mevcut odak tutucularla ve focusLosers mevcut odak kaybedenlerle karşılaştırmak için değerlendirmek 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 gerçek değerlendirme sonuçları hakkındaki bilgileri içerir; bu, geçerli isteğin kabul edilip edilmediğini, geciktiğini veya başarısız olduğunu gösterir. Geçerli odak yığınında yapılacak herhangi bir değişiklik, yığın değişikliğinin niteliğine bağlı olarak newLosers ve newlyBlocked girişlerinde ayarlanmalıdır.

newLosers daha önce odağı koruyan ancak artık kalıcı veya geçici olarak odağı kaybetmesi gereken girişleri içerdiği yer. Kalıcı odak kaybedenler, ses odak yığınından daha da kaldırılacak ve geçici odak kaybedenler, odak yeniden kazanılıncaya veya orijinal odak isteğinde bulunan kişiden ayrılıncaya kadar mevcut odak kaybedenler yığınına taşınacak. Ne olursa olsun, isteklerin odak dinleyicisi karşılık gelen odak kaybıyla karşılaşacaktır.

newlyBlocked listesi, daha önce odağı kaybedenler listesinde olan ancak şimdi yeni giriş tarafından engellenen girişleri içerir. Blok kalıcı veya geçici olabilir, kalıcı odaklama engellendiğinde giriş yığından kaldırılacak ve odak kaybı odak dinleyicilerine gönderilecektir. Geçici odak kaybı için, giriş odak kaybedenler yığınında kalacak, ancak engelleyici listesine yeni bir odak engelleyici eklenecek, daha önce ilk engellendiğinde gönderildiği gibi odak kaybı gönderilmeyecek. Mevcut tüm engelleyiciler kaldırıldığında isteğin engeli nihayet kaldırılacak veya odaklamadan vazgeçilirse yığından kaldırılacak.

İkinci API, notifyAudioFocusChange , her ses odaklama isteğinde veya vazgeçildiğinde çağrılan tek yoldur. API çoğunlukla OEM araç ses hizmetinin davranışını etkileyebilecek odak değişiklikleri hakkında OEM hizmetini bilgilendirmek için kullanılır.

Odak değerlendirmesi için yönergeler

AAOS'ta ses odağı, ses oynatmayı yönetmek ve kullanıcıya en iyi deneyimi sağlamak için hangi uygulamanın uyması gerektiğini belirlemek için kullanılır. Bu nedenle OEM eklenti hizmeti, bir ses odaklama isteğini yönetirken aşağıdakileri dikkate almalıdır:

  • Herhangi bir yüksek öncelikli ses odağı (telefon görüşmesi, acil durum veya güvenlik gibi) olmadan uygulamalar, geçici veya kalıcı olarak ses odağı kazanabilmelidir.

  • Bir medya odağı etkinken uygulamalar şunu ister:

    • Çağrı kullanım odağı, eş zamanlı veya özel olarak odağı alabilmelidir.

    • Gezinme kullanım odağı, eş zamanlı veya özel olarak odağı alabilmelidir.

    • Asistan kullanım odağı, odağı aynı anda veya özel olarak alabilmelidir.

  • Durağan yüksek öncelikli ses odaklama (telefon görüşmesi, acil durum uyarısı veya güvenlik uyarısı gibi) uygulamaları etkinken, gelen herhangi bir gecikmeli ses odaklama isteği gerektiği şekilde kabul edilmeli veya geciktirilmelidir.

Yukarıdaki öneriler kapsamlı olmasa da, odaklanma isteğinde bulunan uygulamaların, aktif yüksek öncelikli ses olmadığında odaklanma elde edebilmesi gerektiğini garanti etmeye yardımcı olabilirler. Yüksek öncelikli sesler aktif olsa bile, gecikmeli odaklanma taleplerine yine de uyulmalı ve yüksek öncelikli ses durduğunda odaklanabilmelidir.

OEM araç hacim hizmeti

Araç ses hizmeti, ses seviyesi tuşu olaylarını ses sisteminden ses seviyesi ayarlarını dinleyerek veya ses seviyesi tuşu olaylarını doğrudan araç giriş hizmetinden dinleyerek yönetir. Her durumda, araç ses sistemi hizmetinin varsayılan davranışı, aktif ses oynatıcılarına ve ses bağlamı öncelik listesine göre hangi ses seviyesi grubunun değiştirileceğini belirlemektir.

İki birim öncelik listesi sağlıyoruz. İlk liste tüm ses bağlamlarını bu sırayla ele alır. Liste azalan sırada sunulur; en yüksek öncelik en üstte, en düşük öncelik en altta yer alır. Örneğin, hem navigasyon sesi hem de müzik sesi aynı anda etkinse, bir ses seviyesi tuşu etkinliği sırasında navigasyon ses seviyesi değiştirilir.

  1. Navigasyon
  2. Arama
  3. Müzik
  4. Duyuru
  5. Ses komutu
  6. Çağrı zili
  7. Sistem sesi
  8. Emniyet
  9. Alarm
  10. Bildiri
  11. Araç durumu
  12. Acil durum

Ses seviyesi tuşu olay yönetimini daha az karmaşık hale getirmek için, araç ses hizmetinde ses bağlamına ilişkin ikinci bir öncelik listesi bulunur:

  1. Arama
  2. Medya
  3. Duyuru
  4. Ses komutu

Bu liste de azalan sırada sunulmaktadır. Bu ikinci listenin amacı, daha yaygın seslerin önemli olaylar yoluyla değiştirilmesine olanak sağlamaktır. Alışılmadık, belki de daha kısa süreli sesler yalnızca ses ayarları kullanıcı arayüzünden yönetilebilir.

Birimin gerçek sürümü audioVolumeAdjustmentContextsVersion yapılandırmasıyla ayarlanabilir. Yapılandırma 1 veya 2 ayarlanabilir (varsayılan 2 ).

Birim yönetimine daha fazla esneklik sağlamak için OemCarAudioVolumeService Android 14'te kullanıma sunuldu:

public interface OemCarAudioVolumeService {
    OemCarvolumeChangeInfo getSuggestedGroupForVolumeChange(
OemCarAudioVolumeRequest request, int volumeAdjustment);
}

OEM araç ses düzeyi hizmetinin, volumeAdjustment ve OemCarAudioVolumeRequest öğelerini 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 aktif ses niteliklerine sahiptir. duckedAttributes tümü şu anda ördekli ses nitelikleridir. volumeGroupState , hacim grubunun geçerli durumuna sahiptir. İstek, ses yığınının mevcut durumunu temsil eder ve hangi ses grubunun değiştirilmesi gerektiğini belirlemek için kullanılabilir. Sonuçlar OemCarVolumeChangeInfo dosyasında döndürülmelidir:

class OemCarVolumeChangeInfo {
    boolean change;
    CarVolumeGroupInfo volumeGroupChanged;
}

change boolean'ı herhangi bir birimin değişip değişmediğini belirtir; true ise bir değişiklik olduğunu ve birim grubunun güncellenmesi gerektiğini belirtir. 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 grubunun sesinin kapatılması gerektiğini gösteriyorsa boole değeri true olur ve döndürülen ses düzeyi grubu, gezinme için olanla aynı olmalıdır.

OEM araba eğilme hizmeti

Araç ses hizmeti, ses odak değişikliklerini izleyerek ve AudioControl HAL'e hangi ses cihazlarının kapatılacağına ilişkin bir sinyal göndererek ses kısmayı yönetir. Odak değiştiğinde, tüm aktif odak sahipleri, bu statik eğilme kuralları dizisine göre hangisinin eğilmesi gerektiğini belirlemek için değerlendirilir:

  • Acil durum sesleri, çağrı sesleri dışında her şeyi bastırır
  • Güvenlik, acil durum sesleri dışında her şeyi göz ardı ediyor
  • Navigasyon, güvenlik ve acil durum sesleri dışında her şeyi göz ardı eder
  • Güvenlik, acil durum ve navigasyon sesleri dışında ördeklere her şeyi söyleyin
  • Sesli ördekler zil seslerini çağırır
  • Müzik ve duyurular her şeyden kaçınılmalıdır

Bu kurallar kapsamlı değildir ve OEM'ler bu yönergelere göre seslerin nasıl bastırılması gerektiğinin belirlenmesinden sorumlu olmaya devam etmektedir. OEM'ler mevcut gereksinimlere göre bu önerileri daha aktif bir şekilde kontrol edebilir. OemCarDuckingService Android 14'te kullanıma sunuldu:

class OemCarAudioDuckingService {
List<AudioAttributes>   evaluateAttributesToDuck(
        OemCarAudioVolumeRequest request);
}

Bu API, ses odağı değişikliklerinde araç ses hizmetinden çağrılır. OEM araba hacim hizmetinde tanıtılan OemCarAudioVolumeRequest yeniden kullanır ve hangi niteliklerin devre dışı bırakılacağına karar vermek için ilgili bilgileri içerir. API'den alınacak ses niteliklerinin listesi mevcut ses durumuyla karşılaştırılır:

  • Ses özelliği şu anda engellendi:

    • Listede yer almaya devam ediyor
    • Listede yok, eğilme kapalı
  • Ses özelliği şu anda eğilmiyor:

    • Listede eğildi
    • Listede yok, eğilme kapalı

Araç ses hizmeti daha sonra ses özniteliklerinin hangi ses çıkış cihazlarına ait olduğunu belirler ve bunları sırasıyla engellenen ses çıkış cihazı listesine veya bağlantısız ses cihazları listesine ekler. Bu, donanım düzeyinde gerekli azaltma işlemini gerçekleştirmek için sonuçta AudioControl HAL'e gönderilir.

Aşağıdaki şekilde, OEM azaltma hizmeti kullanıldığında bir odak isteği için ses azaltma kontrolünün basitleştirilmiş bir sıra diyagramı gösterilmektedir:

resim

Sıra, bir uygulamanın genel ses yöneticisi API'leri aracılığıyla Ses odağını yönetme isteğinde bulunmasıyla başlar. Sonuçların belirlenmesi için istek araç ses servisine iletilir. Ses odağına karar verildiğinde, sesin kısılması, hangi ses özelliklerinin kısılması gerektiğini değerlendirmek için OemCarAudioDuckingService çağıran araç ses hizmeti tarafından değerlendirilir. evaluateAttributesToDuck API'sinden sonuçlar döndürüldükten sonra, eğilecek ses cihazları hesaplanır ve son olarak bilgi, ses donanımına eğilme uygulamak için AudioControl gönderilir.

OEM araç ses hizmeti referans uygulaması

AAOS, OemCarService , OemCarAudioFocusService , OemCarAudioDuckingService ve OemCarAudioVolumeService ile birlikte uygulayan packages/services/Car/tests/OemCarServiceTestApp içinde OEM araç hizmetinin referans uygulamasını sağlar. İkincisi için, her hizmet statik bir davranış yüklemek için XML dosyasını kullanır. Örneğin, OemCarAudioFocusServiceImp , bir etkileşim matrisi içeren oem_focus_config.xml dosyasını yükler. Matris, evaluateAudioFocusRequest çağrıldığında odak isteğini değerlendirmek için kullanılır.

Referans testi uygulamasında hata ayıklama

OEM araç servis testi uygulaması AOSP kaynak kodunun bir parçasıdır. OEM'ler ihtiyaçlarına göre değişiklik yapabilirler. Hata ayıklamak 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ç servisini doğrulamak için OEM hizmetine yönelik araç servis dump komutunu kullanır:

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

Her dump bilgisi kümesindeki her boole özelliğin ve hizmetin durumunu belirler. Örneğin, mIsOemServiceReady döküm bilgisi hizmetin kullanıma hazır olup olmadığını belirtir; burada true hizmetin hazır olduğunu, false ise hazır olmadığını belirtir.