Araba ses eklenti hizmeti

Android 14'te yeni araç OEM eklenti hizmetleri etkinleştirme yapılandırılacak bazı araba bileşenleri var. Özellikle işitsel reklamlarında üç yeni OEM'lerin esnek bir şekilde yapılandırmalarını sağlayan eklenti hizmetleri kullanıma sunuldu AAOS cihazlarda ses yönetimi:

  • Ses odaklama kontrolü
  • Ses düzeyi ve sesi kapatma kontrolü
  • Sesi Kısma kontrolü

Araba eklentisi hizmet mimarisi

Aşağıdaki şekilde, otomobil hizmetleri ve bunların ilişkilerine genel bir bakış sunulmaktadır gönderebilir. Uygulama işlemlerine ve araba hizmeti sürecine benzer şekilde, OEM araba servisi süreci kendi işlem alanını işliyor.

resim

Araba hizmeti, şurada tanımlanan bileşeni bularak OEM otomobil hizmetini başlatır: config_oemCarService Yapılandırma boşsa OEM hizmeti mevcut değildir ve hiçbir hizmet başlatılmaz. Bileşen, resimdeki OemCarService Araç ses hizmeti, araç sesi OEM'sini edinmek için API'lerin üzerine yazmalıdır hizmet:

public final class OemCarServiceImp extends OemCarService {
    @Override
    public OemCarAudioFocusService getOemAudioFocusService();

    @Override
    public OemCarAudioDuckingService getOemAudioDuckingService();

    @Override
    public OemCarAudioVolumeService getOemAudioVolumeService();
}

Örneğin, example, bkz. referans test uygulaması, packages/services/Car/tests/OemCarServiceTestApp.

Hizmet, araba servisi tarafından başlatılsa da otomatik olarak başlamaz. araç ses hizmetinin erişebildiği izinleri devralır. Dolayısıyla, OEM hizmetlerinin gerektirdiği izin, uygun mekanizmasıdır. Örneğin, bkz. packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml

OEM hizmet mimarisine sahip araba ses sistemi hizmeti

AAOS'te araç ses hizmeti şu işlemleri yönetir:

  • Ses yönlendirme
  • Ses odağı
  • Sesi kısma
  • Sesi aç ve kapat

Android 14'ten önce bu davranış çoğunlukla sabitti ve yalnızca ayarlar aracılığıyla değiştirilebilir. Android 14, araç sesi için bir mekanizma kullanıma sundu aşağıdaki hizmetleri yöneten OEM tarafından tanımlanmış bir bileşenle iletişim kurmak için kullanılır:

  • Ses odağı
  • Sesi kısma
  • Sesi aç ve kapat

Aşağıdaki şekilde, araç ses hizmeti ve ses sistemi için basitleştirilmiş bir mimari gösterilmektedir araba OEM servisi var. Araç ses hizmeti, otomobilinizi veya sisteminizi ses davranışını yönetmek için araba OEM ses hizmetini kullanabilir. İkincisi ise yalnızca İlgili OEM araç ses hizmeti bileşeni tanımlanmışsa Aksi halde, araç ses hizmeti varsayılan davranışı kullanır.

resim

Araç ses sistemi hizmetinin ve araba OEM ses hizmetinin her zaman açık olduğundan emin olmak için ve araç ses hizmeti, her aramada aracın ses sistemindeki ses yığınının mevcut durumunu araba OEM ses hizmetine bağlar. Örneğin, araç ses hizmeti, ses odağını değerlendirme isteğine müdahale eder ve sesi yığının mevcut durumunu araba OEM ses hizmetine aktarır. Mevcut durum geçerli odak tutucuyu ve geçerli odak kaybedenleri içerir. Odak kaybedenler hâlâ yığının parçası olan ancak geçici olarak kaybolan odak istekleri odaklanacağız.

Araç ses hizmeti, araçtaki tüm ses etkinliğini yönetmelidir. Araba ses hizmeti ses davranışının bazı bölümlerini yönetmez, ardından aracın OEM ses hizmetine sunulan bilgiler eksik. Örneğin, Bir OEM, otomatik olarak bir cihaz hizmeti sağlayıcısında ses odağı işlemeyi araba ses hizmeti kendi ses odak politikasına sahip değilse, araç ses hizmeti gönderebilirsiniz. Bu, arabanın yeteneklerini etkileyebilir Görünmeyen bilgi içermeyebileceği için karar verme sürecinde OEM ses hizmeti aktarmalısınız.

Araç ses hizmeti, işlem yapmak için OEM araç hizmetlerini arar. Bu aramalar süreçler arası iletişim (IPC) gerektirir. IPC ve her çağrıya gecikme ekler. Rapordaki gecikmeyi en aza indirmek OEM servisi var.

OEM hizmetine yapılan araç ses hizmeti aramaları engellediğinden OEM hizmeti Doğrudan API değerlendirmelerinde araç ses hizmetini çağırmamalıdır. Bunun yerine araç ses hizmeti, servisler ve araçlar arasındaki çağrıların yapılması için ve iki işlem yalnızca tek yönde ilerler.

OEM araç ses hizmeti tanımları

OEM araç ses odak hizmeti

Araba ses hizmeti, bir cihazı kaydettirerek uygulamalardan gelen ses odaklanma isteklerini yönetir ses politikası odağı dinleyicisi. Araba ses hizmeti, sesin ve ses sisteminin mevcut statik bir davranışa dayalı olarak Etkileşim matrisi. Matris, üç farklı etkileşim türünü tanımlar:

  • Eşzamanlı etkileşim. Odaklayıcılar sayesinde odağınızı koruyabilir gerekir.

  • Özel etkileşimler. Gelen odaklanma isteği geçerli odak tutucusu vardır.

  • Etkileşimi reddedin. Gelen odaklanma isteği aşağıdaki nedenlerle reddedildi: geçerli odak tutucuya dokunun.

Bu, bazı otomotiv kullanım alanları için yeterli olsa da tüm çeşitli etkileşim ihtiyaçları ortaya çıkabiliyor. Bunun için OemCarAudioFocusService özelliğini tanıtın:

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

evaluateAudioFocusRequest API'si, araç ses hizmetinden herhangi bir zamanda çağrılır değerlendirilmesi gereken bir ses odağı isteği vardır. Bu istek, Sonuçların döndürülmesini engelleyen API. İstek, ses grubunun mevcut durumu hakkında:

Bu bilgiler, newFocusRequest öğesini, focusHolders bölgesindeki mevcut odak sahipleri ve focusLosers. API aşağıdaki sonuçları döndürür:

class OemCarAudioFocusResult {
    int audioZoneId;
    int audioFocusEvaluationResults;
    AudioFocusEntry focusResult;
    List<AudioFocusEntry> newLosers;
    List<AudioFocusEntry> newlyBlocked;
}

Bu, gerçek değerlendirme sonuçlarıyla ilgili bilgileri audioFocusEvaluationResults değeri, mevcut istekte verilmiş, gecikmiş ya da başarısız olmuş olabilir. Geçerli odak yığınındaki değişiklikler niteliğine bağlı olarak newLosers ve newlyBlocked girişlerinde ayarlanmalıdır gösterir.

newLosers öğesinin, daha önce odak noktası olan ancak dikkati kalıcı veya geçici olarak kaybetmesi gerekir. Odağı kalıcı olarak kaybedenler ses odağı yığınından daha da kaldırılır ve geçici odak kaybedenler yeniden odaklanılana veya yeniden odaklanılana kadar mevcut odak kaybedenler yığınına taşınır terk edilmiş olmalıdır. Her ne olursa olsun, bu isteklere karşılık gelen bir odak kaybedilir.

newlyBlocked listesi, daha önce odak kaybeden listesinde olan girişleri içerir tarafından engelleniyor. Engelleme, kalıcı veya geçici, kalıcı odak noktası engellendi için giriş yığından kaldırılır. odaklanma dinleyicilere gönderilir. Geçici odak kaybı için giriş, odak kaybedenler yığınında kalır ancak yeni odak engelleyici eklenirse daha önce olduğu gibi hiçbir odak kaybı gönderilmez ilk engellendiğinde gönderilmiştir. İsteğin engellemesi, mevcut engelleyiciler kaldırılır, yoksa odaklama şu şekildeyse yığından kaldırılır: terk edilmiş olmalıdır.

İkinci API olan notifyAudioFocusChange, her projede isteme veya bırakma. API çoğunlukla OEM hizmetini bilgilendirmek için kullanılır OEM araç ses hizmetinin davranışını etkileyebilecek odak değişiklikleri hakkında bilgi edinin.

Odak değerlendirmesi yönergeleri

AAOS'de ses odağı, ses çalmayı yönetmek ve hangi uygulamasının kullanıcıya en iyi deneyimi sunmasını sağlamalıdır. Dolayısıyla, OEM eklenti hizmetinin, alakalı bir ses odağı isteği:

  • Ayakta yüksek öncelikli ses odağı (ör. telefon görüşmesi, acil durum veya güvenlik) uygulamaları sese odaklanabilmelidir. geçici veya kalıcı olarak.

  • Bir medya odağı etkinken, istekte bulunan uygulamalar:

    • Arama kullanım odağı, eşzamanlı olarak odaklanabilmelidir özel bir istektir.

    • Navigasyon kullanım odağı, senkronize edebilirsiniz.

    • Asistan kullanım odağı, ikisinden de odaklanabilmelidir senkronize edebilirsiniz.

  • Yüksek öncelikli ses odağı (ör. telefon araması, acil durum) ayaktayken uyarı veya güvenlik uyarısı) etkin olduğunda, gelen gecikmeli ses odağı talebin kabul edilmesi ya da geciktirilmesi gerekir.

Yukarıdaki öneriler olası her durumu içermez, ancak odaklanmayı isteyen uygulamalar, etkin olmadığında yüksek öncelikli sesler duyabilirsiniz. Yüksek öncelikli sesler etkin olduğunda bile gecikmeli odak yine de dikkate alınmalı ve gerekli işlemler gerçekleştirildikten sonra yüksek öncelikli sesi durdurma.

OEM araç ses seviyesi hizmeti

Araba ses hizmeti, ses düzeyiyle ilgili önemli etkinlikleri ses düzeyini dinleyerek yönetir ses sisteminden veya ses düzeyi önemli etkinlikleri doğrudan dinleyerek ayarlamalar yapın araba giriş hizmetinden yararlanabilir. Her iki durumda da, arabanın varsayılan davranışı ses hizmetinin, etkin durumdaki ses düzeylerine göre hangi ses düzeyi grubunun değiştirileceğini ses çalarlar ve ses bağlamı öncelik listesi.

İki hacim önceliği listesi sağlarız. İlk liste tüm sesli reklamları dikkate alır bağlamları bu sıraya göre sıralayın. Liste, en büyük ve azalan düzende sunulur. en altta, en düşük önceliğe sahip olur. Örneğin, navigasyon sesi ve müzik sesi aynı anda etkindir, ardından Bir ses seviyesi önemli etkinliği sırasında gezinme ses düzeyinin değiştirilmesi.

  1. Navigasyon
  2. Ara
  3. Müzik
  4. Duyuru
  5. Sesli komut
  6. Sesli aramada zil çalsın
  7. Sistem sesi
  8. Güvenlik
  9. Alarm
  10. Bildirim
  11. Aracın durumu
  12. Acil durum

Ses seviyesi önemli etkinlik yönetimini daha basit hale getirmek için araç ses hizmetinde ses bağlamının ikinci öncelik listesi:

  1. Ara
  2. Medya
  3. Duyuru
  4. Sesli komut

Bu liste ayrıca azalan sırada sunulur. Bu anahtar listesinin amacı daha yaygın seslerin önemli etkinlikler aracılığıyla değiştirilmesine olanak tanımaktır. Yaygın olmayan daha kısa süreli sesler gibi ses ayarları, ses ayarlarından yönetilebilir Yalnızca kullanıcı arayüzü.

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

Hacim yönetiminde 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, ses düzeyini almak için volumeAdjustment ve OemCarAudioVolumeRequest:

class OemCarAudioVolumeRequest {
    int audioZoneId;
    int callState;
    List<AudioAttributes> activePlaybackAttributes;
    List<AudioAttributes> duckedAttributes;
    List<CarVolumeGroupInfo> volumeGroupState;
}

İsteğin activePlaybackAttributes özelliği etkin ses özelliklerine sahip. İlgili içeriği oluşturmak için kullanılan duckedAttributes şu anda gizlenmiş ses özellikleridir. İlgili içeriği oluşturmak için kullanılan volumeGroupState, birimler grubunun mevcut durumuna sahip. İstek ses yığınının mevcut durumunu gösterir ve ses parçasının mevcut durumunu hangi ses düzeyi grubunun değiştirilmesi gerektiğini belirler. Sonuçlar OemCarVolumeChangeInfo:

class OemCarVolumeChangeInfo {
    boolean change;
    CarVolumeGroupInfo volumeGroupChanged;
}

change boole değeri herhangi bir hacmin değişip değişmediğini, true ise şunları belirtir: bir değişiklik olur ve ses düzeyi grubunun güncellenmesi gerekir. İlgili içeriği oluşturmak için kullanılan volumeGroupChanged, değiştirilmesi gereken gerçek ses düzeyi grubudur. Bu grup, orijinal volumeAdjustment parametresine göre değiştirilmelidir API'ye aktarılmıştır. Örneğin, sonuçlar, gezinmenin ses grubunun sesi kapatılmalıdır; boole değeri true olur ve döndürülen gezinme için ses grubu olması gerekir.

OEM araba ayırma hizmeti

Araba ses hizmeti, ses odağı değişikliklerini izleyerek sesi kısmayı yönetir ve AudioControl HAL'ye hangi ses cihazlarının kapatılacağına dair bir sinyal gönderiliyor. Odak değiştiğinde, tüm etkin odak sahipleri, odak noktalarının belirlenmesi için bu statik kısma grubuna göre izlenmesi gereken kurallar:

  • Acil durum sesleri, arama sesleri dışında her şeyi gizler
  • Güvenlik, acil durum sesleri dışında her şeyi kapatır
  • Navigasyon, güvenlik ve acil durum sesleri dışında hiçbir şeyin sesini kapatır
  • Güvenlik, acil durum ve navigasyon sesleri hariç her şeyi ara
  • Voice ördekler, zil sesi çıkarır
  • Müzik ve anonsların arkasında duran her şey

Bu kurallarda olası her duruma yer verilmemiştir ve OEM'ler, seslerin nasıl azaltılması gerektiğini konuştuk. OEM'ler bunları kontrol edebilir mevcut koşullara göre daha etkin bir şekilde öneriyoruz. İlgili içeriği oluşturmak için kullanılan 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. Yeniden kullanır OemCarAudioVolumeRequest tarihinde tanıtılan OEM araç hacmi hizmeti ve bununla alakalı karar vermek için gereken tüm bilgileri içerir. Görev listesi API'den ördek'e eklenen ses özellikleri, mevcut ses durumuyla karşılaştırılır:

  • Ses özelliği şu anda gizleniyor:

    • Listede gözden kaçmaya devam ediyor
    • Listede değil, tercih etme devre dışı
  • Şu anda gizlenmemiş ses özelliği:

    • Listede, sade
    • Listede değil, tercih etme devre dışı

Araç ses hizmeti, daha sonra sesin hangi ses çıkışının kullanılacağını belirler özellikleri de dahil olup bunları gizlenmiş ses çıkışı cihaz listesine veya açık ses cihazları listesine gidin. Bu, nihai olarak AudioControl HAL'yi kullanarak gereken kısmayı içerir.

Aşağıdaki şekilde sesi kısmanın basitleştirilmiş bir sıra şeması gösterilmektedir OEM reklam kısma hizmeti kullanıldığında odaklanma isteğinin kontrolü:

resim

Sıra, bir uygulama istekte bulunduğunda başlar Ses odağını yönetme API'leri üzerinden çalışır. İstek, araç ses sistemine yönlendirilir hizmeti kullanabilirsiniz. Ses odağına karar verildiğinde ses kısılır OemCarAudioDuckingService cihazını çağıran araç ses hizmeti tarafından değerlendirilir hangi ses özelliklerinin gizlenmesi gerektiğini değerlendirebilirsiniz. Sonuçlar döndürüldüğünde evaluateAttributesToDuck API'sinden ses cihazları arasından, ve son olarak da bilgiler gizleme işlemini uygulamak için AudioControl yaptığı değişikliklerdir.

OEM araç ses hizmeti referansı uygulaması

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

Test uygulaması hata ayıklamaya referans

OEM araç hizmeti test uygulaması, AOSP kaynak kodunun bir parçasıdır. OEM'ler uygun şekilde değişiklik yapmaktır. Hata ayıklama için config_oemCarService komutunu kullanın test uygulamasını etkinleştirin.

<!-- 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, doğrulamak için araba hizmeti dump komutunu kullanır. OEM hizmeti:

adb shell dumpsys car_service --oem-service

Sonuçlar aşağıdaki çıkışla 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 grubundaki her boole, özelliğin durumunu belirler ve hizmet. Örneğin, döküm bilgisi mIsOemServiceReady, hizmet kullanıma hazır (true, hizmetin hazır olduğunu belirtir ve false) hazır olmadığını belirtir.