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.
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.
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ą.
- Nawigacja
- Zadzwoń
- Muzyka
- Ogłoszenie
- Polecenie głosowe
- Dzwonek połączenia
- Dźwięki systemowe
- Bezpieczeństwo
- Alarm
- Powiadomienie
- Stan pojazdu
- 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:
- Zadzwoń
- Multimedia
- Ogłoszenie
- 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:
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.