Usługa wtyczek audio w samochodzie

Nowe usługi wtyczek samochodowych OEM w Androidzie 14 są włączone niektóre elementy samochodu. Jeśli chodzi o dźwięk, 3 nowe wprowadzono usługi wtyczek, które pozwalają producentom OEM na elastyczną konfigurację zarządzanie dźwiękiem na urządzeniach z AAOS:

  • Sterowanie ostrością dźwięku
  • Sterowanie głośnością i wyciszeniem
  • Sterowanie wyciszaniem dźwięku

Architektura usługi wtyczek samochodowych

Poniższy rysunek zawiera omówienie usług samochodowych i ich relacji do serwisu samochodowego OEM. Podobnie jak w przypadku procesów aplikacji i serwisu samochodowego, proces naprawy samochodów OEM zajmuje własną przestrzeń procesu.

obraz

Serwis samochodowy rozpoczyna usługę samochodową OEM, znajdując komponent zdefiniowany w config_oemCarService Jeśli konfiguracja jest pusta, oznacza to, że usługa OEM nie istnieje i żadna usługa nie jest uruchomiona. Komponent musi być dłuższy OemCarService – Usługa audio w samochodzie musi zastąpić interfejsy API w celu pozyskania producenta OEM usługa:

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

    @Override
    public OemCarAudioDuckingService getOemAudioDuckingService();

    @Override
    public OemCarAudioVolumeService getOemAudioVolumeService();
}

Dla: przykład, zobacz referencyjna aplikacja testowa zdefiniowana w packages/services/Car/tests/OemCarServiceTestApp

Mimo że usługa została uruchomiona przez usługę samochodową, nie zostanie uruchomiona automatycznie odziedziczą uprawnienia dostępne w usłudze audio w samochodzie. W związku z tym wszelkie zgody wymagane przez usługi OEM należy uzyskać . Na przykład zobacz packages/services/Car/data/etc/com.android.car.oemcarservice.testapp.xml

Samochodowa usługa audio z architekturą OEM

W AAOS samochodowy system audio zarządza tymi działaniami:

  • Kierowanie dźwięku
  • Aktywność audio
  • Wyciszanie tła
  • Głośność i wycisz

Przed Androidem 14 to zachowanie było w dużej mierze statyczne. można modyfikować wyłącznie za pomocą ustawień, jednak w niektórych przypadkach. W Androidzie 14 wprowadzono mechanizm samochodowy do komunikowania się z komponentem zdefiniowanym przez OEM, który zarządza:

  • Aktywność audio
  • Wyciszanie tła
  • Głośność i wycisz

Na rysunku poniżej przedstawiono uproszczoną architekturę usługi audio w samochodzie serwis OEM. Usługa samochodowego systemu audio definiuje różne uchwyty, które mogą wywoływać do zarządzania dźwiękiem w samochodzie. Ten drugi sposób występuje tylko jeśli zdefiniowany jest odpowiedni komponent usługi audio samochodowego OEM. W przeciwnym razie usługa audio w samochodzie korzysta z działania domyślnego.

obraz

Aby usługa audio w samochodzie i usługa audio OEM firmy OEM były zawsze włączone dla każdego połączenia system audio w samochodzie przekazuje wymagane części obecny stan stosu audio usługi audio OEM w samochodzie. Na przykład, gdy system audio w samochodzie przechwytuje żądanie oceny uwagi na dźwięk, obecny stan stosu do usługi audio OEM w samochodzie. Obecny stan obejmuje obecny obiekt i osoby, które utraciły fokus. Osoby, które tracą koncentrację, żądania skupienia uwagi, które nadal są częścią stosu, ale zostały tymczasowo utracone ostrość.

Usługa audio w samochodzie musi zarządzać całą aktywnością związaną z dźwiękiem w samochodzie. Jeśli samochód nie zarządza niektórymi aspektami działania audio, informacje udostępniane usłudze audio OEM są niekompletne. Na przykład, jeśli OEM zastępuje obsługę ostrości audio w usłudze samochodowej, rejestrując własnych zasad dotyczących skupienia dźwięku, system audio w samochodzie nie może zapewnić pełnych do usługi audio OEM. Może to mieć wpływ na zdolność samochodu Usługa audio OEM do podejmowania decyzji, ponieważ może brakować informacji niewidocznych do samochodowego systemu audio.

Aby podjąć działania, usługa audio w samochodzie wywołuje usługi samochodowe OEM. Te połączenia przebiegają między procesami, co wymaga komunikacji między procesami (IPC). IPC wydłuża czas oczekiwania na połączenie. Ważne jest, aby zminimalizować opóźnienia Serwis OEM.

Ponieważ połączenia z usługą audio w samochodzie do usługi OEM są blokowane, usługa OEM nie powinien wywoływać usługi audio samochodu przy bezpośrednich ocenach interfejsu API. Zamiast tego makro samochodowy system audio udostępnia niezbędne informacje, które umożliwiają nawiązywanie połączeń ponieważ dwa procesy mogą poruszać się tylko w jednym kierunku.

Definicje usług audio w samochodzie OEM

Usługa skupiania uwagi na samochodowym urządzeniu audio

Samochodowa usługa audio zarządza prośbami aplikacji o aktywowanie dźwięku, rejestrując detektorem ukierunkowanym na zasady audio. Samochodowa usługa audio ma mechanizm do zarządzania i zachowania skupienia na podstawie statycznych Macierz interakcji. Macierz definiuje 3 różne rodzaje interakcji:

  • Równoczesna interakcja. Uchwyt ostrości pozwala utrzymać ostrość na tym samym poziomie obecnie się znajdujesz.

  • Wyjątkowe interakcje. Przychodzące żądanie fokusu skupia się aktualnie zaznaczony obszar.

  • Odrzuć interakcję. Przychodząca prośba o fokus została odrzucona na podstawie: aktualnie zaznaczony obszar.

W niektórych przypadkach powinno to wystarczać, ale nie spełnia wszystkich wymagań potrzeby interakcji, które mogą być inne ze względu na wymagania OEM. W tym celu Przedstaw OemCarAudioFocusService:

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

Interfejs API evaluateAudioFocusRequest jest w dowolnym momencie wywoływany z usługi audio w samochodzie pojawia się żądanie skupienia na dźwięku, które wymaga oceny. Służy ono dwukierunkowej Interfejs API, który blokuje zwracanie wyników. Prośba zawiera informacje o bieżącym stanie stosu audio:

Na podstawie tych informacji możesz ocenić newFocusRequest w porównaniu z obecni skupieni są w: focusHolders, a obecni użytkownicy, którzy tracili ostrość, w: focusLosers Interfejs API powinien zwrócić takie wyniki:

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

Zawierają one informacje o rzeczywistych wynikach oceny w audioFocusEvaluationResults, który wskazuje, czy bieżące żądanie ma została przyznana, opóźniona bądź zakończyła się niepowodzeniem. Wszelkie zmiany w bieżącym stosie fokusu powinna być ustawiona we wpisach newLosers i newlyBlocked, w zależności od charakteru zmiany stosu.

Gdzie newLosers zawiera wpisy, które wcześniej pozostawały fokusem, ale powinna przestać być aktywna, na stałe lub przejściowo. Osoby, które trwale tracą koncentrację zostaną usunięte ze stosu audio, a przejściowe elementy rozpraszające uwagę zostanie przeniesiony do obecnego stosu osób tracijących skupienie do czasu, gdy odzyska ostrość porzuconych od pierwotnej prośby o fokus. Tak czy inaczej, funkcja nasłuchiwania żądania utracą odpowiednie zaznaczenie.

Lista newlyBlocked zawiera wpisy, które wcześniej znajdowały się w elemencie ograniczającym fokus , ale teraz są blokowane przez nowy wpis. Blokada może być trwała lub przejściowy, w przypadku zablokowania stałego fokusu wpis zostanie usunięty ze stosu i stany skupienia będą wysyłane do detektorów. W przypadku przejściowej utraty ostrości pozostanie na stosie osób, które utraciły fokus, ale zostanie dodana nowa blokada. została dodana do listy programów blokujących, żadne informacje o utracie ostrości nie zostaną wysłane tak jak poprzednio wysłane podczas pierwszego zablokowania. Prośba zostanie ostatecznie odblokowana, gdy wszystkie bieżące blokady zostały usunięte, a jeśli jest zaznaczone, zostanie usunięte ze stosu. porzucony.

Drugi interfejs API, notifyAudioFocusChange, to jeden sposób, który jest wywoływany lub je porzucić. Interfejs API jest używany głównie do informowania usługi OEM o zmianach ostrości, które mogą mieć wpływ na działanie samochodowej usługi audio OEM.

Wytyczne dotyczące oceny skupienia

W AAOS aktywność audio służy do zarządzania odtwarzaniem dźwięku i określania, powinna być optymalna dla użytkownika. W związku z tym: usługa wtyczki OEM podczas zarządzania żądanie skupienia na dźwięku:

  • bez utrzymywania ostrości dźwięku o wysokim priorytecie (np. połączenia telefonicznego lub aplikacje alarmowe lub bezpieczne, muszą mieć możliwość skupienia się na dźwięku tymczasowo lub na stałe.

  • Gdy fokus jest aktywny, aplikacje żądające:

    • Wykorzystanie przez połączenie, możliwe jest jednoczesne koncentracja lub wyłącznie.

    • Nawigacja powinna być ukierunkowana na korzystanie z nawigacji. jednocześnie lub wyłącznie.

    • koncentracja na korzystaniu z Asystenta; użytkownik powinien być w stanie skupić się albo jednocześnie lub wyłącznie.

  • Gdy stoisz skupiony dźwięk o wysokim priorytecie (np. podczas połączenia telefonicznego, aplikacje z alertami lub alertami bezpieczeństwa), wszystkie przychodzące z opóźnionym dźwiękiem odpowiedź na żądanie powinna zostać zaakceptowana lub opóźniona zależnie od potrzeb.

Chociaż powyższe sugestie nie są wyczerpujące, mogą pomóc zagwarantować, aplikacje wymagające skupienia uwagi, powinny mieć możliwość skupienia się, gdy nie ma aktywnych dźwięki o wysokim priorytecie. Opóźniona ostrość nawet wtedy, gdy dźwięki o wysokim priorytecie są aktywne żądania nadal powinny być respektowane i powinny być w stanie skupić się na żądaniach zatrzymuje się dźwięk o wysokim priorytecie.

Serwis woluminu samochodowego OEM

Samochodowa usługa audio zarządza zdarzeniami związanymi z kluczykiem głośności, nasłuchując ich w dźwięku ustawień systemu audio lub bezpośredniego wsłuchiwania się w kluczowe zdarzenia związane z głośnością, z usługi wprowadzania danych w samochodzie. W każdym przypadku domyślne działanie samochodu w usłudze audio jest określenie, którą grupę głośności zmienić na podstawie aktywnej odtwarzaczy audio i listę priorytetów kontekstu audio.

Udostępniamy 2 listy priorytetów ilości. Pierwsza lista uwzględnia wszystkie treści audio kontekstów w tej kolejności. Lista jest prezentowana w kolejności malejącej – od największej wartości priorytet na górze, a najniższy na dole. Na przykład, jeśli dźwięk nawigacji i muzyka są w tym samym czasie aktywne, głośność nawigacji zmienia się podczas zdarzenia związanego z głośnością.

  1. Nawigacja
  2. Zadzwoń
  3. Muzyka
  4. Ogłoszenie
  5. Polecenie głosowe
  6. Dzwonek połączenia
  7. Dźwięki systemowe
  8. Bezpieczeństwo
  9. Alarm
  10. Powiadomienie
  11. Stan pojazdu
  12. Alarmowe

Aby zarządzanie zdarzeniami związanymi z głośnością było mniej skomplikowane, samochodowy system audio ma lista treści audio o drugim priorytecie:

  1. Zadzwoń
  2. Multimedia
  3. Ogłoszenie
  4. Polecenie głosowe

Lista jest też przedstawiona w porządku malejącym. Cel tej listy sekund jest możliwość zmiany typowych dźwięków za pomocą kluczowych zdarzeń. Rzadkie może być krótszy niż czas trwania, można zarządzać w ustawieniach audio Tylko interfejs użytkownika.

Rzeczywistą wersję woluminu można ustawić za pomocą Konfiguracja: audioVolumeAdjustmentContextsVersion. Konfiguracją może być ustawiono na 1 lub 2 (domyślnie 2).

Aby zapewnić większą elastyczność zarządzania liczbą, W Androidzie 14 wprowadzono OemCarAudioVolumeService:

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

Usługa regulacji głośności w samochodzie OEM ma jedną metodę, która pobiera volumeAdjustment i OemCarAudioVolumeRequest:

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

activePlaybackAttributes żądania ma aktywne atrybuty audio. duckedAttributes to obecnie ukryte atrybuty dźwięku. volumeGroupState zawiera bieżący stan grupy woluminów. Żądanie przedstawia bieżący stan stosu audio i może służyć do określenia, Którą grupę głośności należy zmienić. Wyniki powinny zostać zwrócone w OemCarVolumeChangeInfo:

class OemCarVolumeChangeInfo {
    boolean change;
    CarVolumeGroupInfo volumeGroupChanged;
}

Wartość logiczna change wskazuje, czy zmienił się jakaś głośność, a true wskazuje, że nastąpiła zmiana i należy zaktualizować grupę głośności. volumeGroupChanged to grupa woluminów, którą należy zmienić. Ten grupę należy zmienić zgodnie z oryginalnym parametrem volumeAdjustment przekazywane do interfejsu API. Jeśli na przykład wyniki wskazują, że nawigacja grupa głośności powinna być wyciszona, wartość logiczna to true, a zwracana wartość Grupa głośności powinna być na potrzeby nawigacji.

Wyciszanie tła samochodu OEM

Samochodowa usługa audio steruje wyciszaniem tła, monitorując zmiany ostrości dźwięku wysyłam do HAL AudioControl sygnał dotyczący urządzeń audio, które mają się wyciszać. Po zmianie ostrości wszyscy aktywni obiekty są oceniani, aby określić, który powinien zostać wstrzymywany na podstawie tego zestawu statycznego wyciszania tła reguły:

  • Dźwięki alarmowe wyciszają wszystko z wyjątkiem dźwięków połączeń
  • Bezpieczeństwo wszystko oprócz dźwięków alarmowych
  • Nawigacja wycisza wszystko oprócz dźwięków bezpieczeństwa i alarmów
  • Dzwoń do wszystkiego z wyjątkiem dźwięków dotyczących bezpieczeństwa, sytuacji alarmowej i nawigacji
  • Dźwięki dzwonka połączeń głosowych kaczek
  • Muzyka i ogłoszenia powinny być ukryte przed wszystkim

Reguły te nie są wyczerpujące, a to odpowiedzialność za ustalenie jak należy wyciszać dźwięki zgodnie z tymi wytycznymi. OEM może kontrolować bardziej aktywne rekomendacje na podstawie dostępnych wymagań. W Androidzie 14 wprowadzono OemCarDuckingService:

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

Ten interfejs API jest wywoływany z usługi audio w samochodzie przy zmianach ostrości dźwięku. Ponownie wykorzystuje OemCarAudioVolumeRequest wprowadzone w usługa liczby pojazdów OEM i zawiera odpowiednie aby podjąć decyzję o tym, które atrybuty warto ukryć. Lista atrybuty audio „duck” z interfejsu API są porównywane z bieżącym stanem audio:

  • Atrybut audio jest obecnie ukryty:

    • Na liście nadal ukrywane
    • Nie ma na liście, wyciszanie tła wyłączone
  • Atrybut audio nie jest obecnie zasłonięty:

    • Na liście, wycofano
    • Nie ma na liście, wyciszanie tła wyłączone

Następnie samochodowa usługa audio określa, z których urządzeń wyjściowych audio jest odtwarzany dźwięk. należą do nich i dodaje je do listy ułożonych urządzeń wyjściowych audio lub listę odpowiednio nieuporządkowanych urządzeń audio. Są one ostatecznie wysyłane do AudioControl HAL, aby wykonać wymagane jest wyciszanie na poziomie sprzętowym.

Na ilustracji poniżej widać uproszczony schemat sekwencyjny wyciszania tła. dla żądania fokusu, gdy używana jest usługa wyciszania tła OEM:

obraz

Sekwencja rozpoczyna się, gdy aplikacja wysyła żądanie Zarządzanie aktywnością audio w publicznych interfejsach API menedżera dźwięku. Żądanie zostanie przekierowane do systemu audio w samochodzie i określania wyników. Po określeniu ostrości dźwięku wyciszanie tła jest oceniany przez samochodowy system audio wywołujący OemCarAudioDuckingService na ocenić, które atrybuty dźwięku należy schować. Po zwróceniu wyników z interfejsu API evaluateAttributesToDuck, obliczane są urządzenia audio do wyciszenia, a na koniec informacje są wysyłane do usługi AudioControl, aby zastosować ukrycie. do sprzętu audio.

Wdrożenie referencyjnej usługi audio w samochodzie OEM

AAOS udostępnia referencyjną implementację usługi samochodowej OEM w packages/services/Car/tests/OemCarServiceTestApp, która implementuje metodę OemCarService oraz OemCarAudioFocusService, OemCarAudioDuckingService oraz OemCarAudioVolumeService. W przypadku tego drugiego problemu i plik XML używany w każdej usłudze do wczytywania statycznego zachowania. Przykład: OemCarAudioFocusServiceImp wczytuje interfejs oem_focus_config.xml, który zawiera macierz interakcji. Macierz jest używana do oceny prośby o zaznaczenie po wywołaniu funkcji evaluateAudioFocusRequest.

Odwołanie do debugowania aplikacji testowej

Aplikacja do testowania usług samochodowych OEM jest częścią kodu źródłowego AOSP. OEM może zmienia się w zależności od ich potrzeb. Do debugowania użyj polecenia config_oemCarService aby włączyć aplikację testową.

<!-- 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>

Aby sprawdzić, czy usługa samochodowa OEM, używa polecenia dump usługi samochodowej do Usługa OEM:

adb shell dumpsys car_service --oem-service

Wyniki mogą być podobne do tych poniżej:

***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

Każda wartość logiczna w każdej grupie informacji typu dump określa stan cechy i usługi. Na przykład informacje o zrzucie mIsOemServiceReady określają, czy plik usługa jest gotowa do użycia, gdzie true oznacza, że jest gotowa, a false oznacza, że nie jest gotowy.