Przed rozpoczęciem strumienia logicznego aplikacja zażąda fokusu audio za pomocą tego samego atrybutów audio używanych w strumieniu logicznym. Aplikacja musi uwzględniać koncentrację w postaci strat, które będą działać zgodnie z oczekiwaniami w branży motoryzacyjnej.
Chociaż wysyłanie prośby o fokus jest zalecane, system nie wymusza tego. Dlatego traktuj koncentrację jako sposób na pośrednią kontrolę i unikanie konfliktów. podczas odtwarzania, a nie jako główny mechanizm sterowania dźwiękiem. Pojazd nie powinien zależeć od systemu ostrości w działaniu podsystemu audio.
Zaznacz interakcje
Aby obsługiwać system AAOS, żądania ostrości w odniesieniu do dźwięku są obsługiwane na podstawie wstępnie zdefiniowanych
interakcje między elementem „CarAudioContext
” żądania a bieżącym elementem
uchwyty ostrości. Wyróżniamy 3 typy interakcji:
- Tylko wybrani użytkownicy
- Odrzuć
- Równoczesne
Interakcja na wyłączność
To model interakcji najczęściej używany na Androidzie.
Podczas interakcji wyłącznych tylko jedna aplikacja w danym momencie może być aktywna.
Dlatego przychodzące żądanie zaznaczenia jest zaznaczane, a dotychczasowy fokus
gdy użytkownik traci ostrość. Obie aplikacje odtwarzają multimedia, więc tylko jedna może przechowywać
ostrość. W rezultacie żądanie skupienia nowo uruchomionej aplikacji jest zwracane jako
AUDIOFOCUS_REQUEST_GRANTED
, podczas gdy aplikacja odtwarzająca muzykę odbiera
zdarzenie zmiany skupienia ze stanem utraty odpowiadającym typowi żądania
wszystkiego, co udało się osiągnąć.
Odrzuć interakcję
W przypadku interakcji typu reject (odrzucanie) przychodzące żądanie jest zawsze odrzucane. Dla:
na przykład podczas próby odtwarzania muzyki w trakcie połączenia. W tym
w przypadku, gdy Telefon trzyma skupienie na dźwięku podczas połączenia, a druga aplikacja prosi o zaznaczenie
aby odtwarzać muzykę, w odpowiedzi aplikacja muzyczna otrzymuje AUDIOFOCUS_REQUEST_FAILED
do danej prośby. Ponieważ prośba o skupienie jest odrzucana, nie zostaje zrealizowana żadna utrata fokusu
aktualnie zaznaczony obszar.
Równoczesna interakcja
Unikalne w systemie AAOS interakcje są równoczesne. Dzięki temu aplikacje, które proszą o dźwięk, skupić się w samochodzie jednocześnie z innymi aplikacjami. Dla współczesna interakcja, muszą zostać spełnione następujące warunki. Funkcje:
Przychodząca prośba o fokus musi prosić o zgodę na AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
Bieżący obiekt ostrości nie setPauseAfterDucked(true)
Osoba zajmująca się nie chce otrzymywać wydarzeń z kaczkami
Jeśli te kryteria są spełnione, prośba o fokus zwraca
AUDIOFOCUS_REQUEST_GRANTED
, podczas gdy obecny zaznaczony obszar nie zmienia się
ostrość. Jeśli jednak obecny właściciel zdecyduje się na udział w wydarzeniach z kaczkami
wstrzymany po cofnięciu, bieżący obiekt ostrości traci ostrość, tak jak w przypadku
i innych interakcji.
Obsługa równoczesnych strumieni
Chociaż równoczesna interakcja ma wiele zastosowań, zachowaj ostrożność podczas mieszania,
na poziomie sprzętowym na różnych urządzeniach wyjściowych. Zdecydowanie zalecamy
Odtwarzacze CarAudioContext
, które mogą być odtwarzane jednocześnie, powinny zostać przekierowane do
różnych urządzeń wyjściowych.
Dzięki osobnym urządzeniom wyjściowym dla równoczesnych transmisji można korzystać ze HAL zaniechać jednego ze strumieni przed ich zmieszaniem lub kierować strumienie fizyczne, na różne głośniki w pojeździe. Jeśli strumienie logiczne są pomieszane w Zyski są niezmienione i dostarczane w ramach tego samego strumienia fizycznego.
Jeśli na przykład nawigacja i multimedia są dostarczane jednocześnie, wzmocnienie dla strumienia multimediów może zostać tymczasowo zredukowana (lub wyciszona), aby wskazówki dojazdu są bardziej słyszalne. Ewentualnie nawigacja strumień może być kierowany na głośniki po stronie kierowcy, podczas gdy multimedia nadal grać w pozostałej części chaty.
Macierz interakcji
Tabela poniżej przedstawia macierz interakcji zdefiniowaną przez CarAudioService
.
Każdy wiersz reprezentuje pola CarAudioContext
bieżącego właściciela zaznaczenia i każdy
reprezentuje żądanie przychodzące.
Na przykład gdy aplikacja do multimediów jest ustawiona jako aplikacja do nawigacji zaznaczenie wskazuje, że 2 interakcje mogą być odtwarzane jednocześnie, przy założeniu, że inne kryteria jednoczesne interakcje są realizowane.
Współbieżne interakcje mogą spowodować, że zaznaczony element. W takim przypadku przychodzące żądanie fokusu jest porównywane z każdym ze niż obecnie się skupiają. W tym wygrywa najbardziej zachowawcza interakcja. Odrzuć, a następnie wyłącz w końcu równoczesne.
Rysunek 1. Macierz interakcji z dźwiękiem.
Nawigacja podczas rozmów telefonicznych
W Androidzie 11 wprowadziliśmy nowe ustawienie użytkownika, które umożliwiało zmienianie
interakcje między nawigacją a połączeniami telefonicznymi. Po ustawieniu
android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL
zmienia wartość
interakcja między przychodzącymi NAVIGATION
prośbami o koncentrację a bieżącym CALL
z jednoczesnych lub odrzuconych. Jeśli użytkownik tego preferuje
instrukcje nawigacji nie przerywają połączenia, mogą włączyć to ustawienie. Ten
jest utrwalony dla użytkownika i może być ustawiany dynamicznie,
respektować nowe ustawienie.
Opóźniona regulacja ostrości audio
W Androidzie 11 system AAOS dodał obsługę żądania aktywności opóźnionej. Ten pozwala opóźniać przejściowymi żądaniami uwagi, gdy interakcja z nimi zazwyczaj powoduje ich odrzucenie. Raz efektem tej zmiany jest skupienie się na opóźnionym żądaniu. prośba zostanie zaakceptowana.
Reguły dotyczące opóźnionych żądań skupienia na dźwięku
Tylko żądania trwałe. Opóźnione żądanie można przesłać tylko w przypadku nieprzejściowych źródeł dźwięku, aby uniknąć długotrwałego odtwarzania dźwięku przejściowego. po tym, co jest istotne.
Jednorazowo można opóźnić tylko jedno żądanie. Jeśli żądanie możliwe do opóźnienia to gdy istnieje już opóźnione żądanie, pierwotne żądanie jest opóźnione odbiera zdarzenie zmiany
AUDIOFOCUS_LOSS
, a nowe żądanie otrzymuje odpowiedź synchroniczna funkcjiAUDIOFOCUS_REQUEST_DELAYED
.Opóźnione żądania muszą mieć
OnAudioFocusChangeListener
Raz jest opóźnione, odbiornik służy do powiadamiania osobisty zgłaszającego o tym, zostanie ostatecznie przyznana (AUDIOFOCUS_GAIN
) lub zostanie odrzucona później (AUDIOFOCUS_LOSS
).
Żądaj opóźnionego zaznaczenia
Aby utworzyć żądanie, które może zostać opóźnione:
Użyj konta
AudioFocusRequest.Builder#setAcceptsDelayedFocusGain
.mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener(); mDelayedFocusRequest = new AudioFocusRequest .Builder(AudioManager.AUDIOFOCUS_GAIN) .setAudioAttributes(mMusicAudioAttrib) .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener) .setForceDucking(false) .setWillPauseWhenDucked(false) .setAcceptsDelayedFocusGain(true) .build();
Wysyłając żądanie, przetwórz odpowiedź
AUDIOFOCUS_REQUEST_DELAYED
:int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest); if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // start audio playback return; } if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) { // audio playback delayed to audio focus listener return; }
Gdy żądanie jest opóźnione, detektor fokusu obsługuje zmiany będące częścią fokusu:
private final class MediaWithDelayedFocusListener implements OnAudioFocusChangeListener { @Override public void onAudioFocusChange(int focusChange) { synchronized (mLock) { switch (focusChange) { case AudioManager.AUDIOFOCUS_GAIN: … // Start focus playback case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: … // Pause media transiently case AudioManager.AUDIOFOCUS_LOSS: … // Stop media
Wielostrefowe zarządzanie fokusem
W pojazdach z kilkoma strefami audio sterowanie dźwiękiem jest regulowane niezależnie dla każdej strefy. W związku z tym żądanie do jednej strefy nie uwzględnia tego, nie rozprasza uwagi w innych strefach ani nie powoduje, że osoby w innych strefach stracić ostrość. Dzięki temu główny widok główny można kontrolować niezależnie od system rozrywki na tylnych fotelach, by nie przerywać odtwarzania dźwięku w jednej strefie ze zmianami wprowadzonymi w drugiej.
W przypadku wszystkich aplikacji to CarAudioService
automatycznie zarządza zaznaczeniem. Cel
strefa audio żądania jest określana przez powiązane z nim UserId
lub UID
(szczegółowe informacje znajdziesz w artykule Routing audio).
Żądanie dźwięku z kilku stref jednocześnie
Jeśli aplikacja chce odtwarzać dźwięk w kilku strefach jednocześnie, musi poprosić o
w każdej strefie, uwzględniając AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
w
pakiet:
//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
zoneId);
AudioAttributes attributesWithZone = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.addBundle(bundle)
.build();
//Create focus request using built attributesWithZone
Ten parametr pakietu umożliwia zgłaszającemu żądanie zastąpienie automatycznej strefy audio na używanie określonego identyfikatora strefy. W związku z tym aplikacja może mieć problem dla różnych stref audio.
Aktywność HAL audio
Począwszy od Androida 11 lista HAL jest włączona, aby żądać koncentracji w imieniu: strumienie zewnętrzne. Chociaż korzystanie z tych interfejsów API jest opcjonalne, zdecydowanie zalecamy bo dźwięki z zewnątrz są optymalnymi uczestnikami ekosystemu Androida dla wygody użytkowników.
HAL ostatecznie określa, które dźwięki powinny mieć priorytet. W tym zakresie dźwięki alarmowe i ważne dla bezpieczeństwa należy odtwarzać niezależnie czy HAL ma włączoną aktywność audio i nadal powinno być odtwarzany prawidłowo, nawet jeśli HAL utraci ostrość obrazu. To samo dotyczy funkcji wszelkie dźwięki wymagane przez rządowe przepisy.
HAL powinien podczas rozgrywki aktywnie wyciszać strumienie z Androida dźwięki alarmowe lub o istotnym znaczeniu dla bezpieczeństwa, aby były dobrze słyszalne.
Sterowanie dźwiękiem@2.0
W wersji 2.0 interfejsu AudioControl HAL wprowadziliśmy te nowe interfejsy API:
Interfejs API | Cel |
---|---|
IAudioControl#registerFocusListener |
Rejestruje instancję IFocusListener z
Interfejs HAL sterowania dźwiękiem. Ten detektor umożliwia HAL wysyłanie żądań dźwięku i porzucenie dźwięku
ostrość. HAl udostępnia instancję ICloseHandle , która ma być używana przez
Android, aby wyrejestrować detektor. |
IAudioControl#onAudioFocusChange |
Powiadamia HAL o zmianach stanu na prośby o koncentrację zgłoszone przez HAL
przez IFocusListener , w tym odpowiedzi na początkowe
o skupienie uwagi. |
IFocusListener#requestAudioFocus
| Żądania są skoncentrowane w imieniu HAL w przypadku określonego użycia, identyfikatora strefy i rodzaju wzmocnienia. |
IFocusListener#abandonAudioFocus |
Porzuca istniejące żądania HAL fokusu dotyczące określonego wykorzystania i strefy ID. |
HAL może mieć wiele żądań fokusu jednocześnie, ale jest ograniczony do jednego żądania na wykorzystanie i parowanie identyfikatorów strefy. Android od razu przyjmuje HAL rozpoczyna odtwarzanie dźwięków na potrzeby użycia po przesłaniu żądania i przechodzi do i robić to, aż odpadnie.
Inne niż registerFocusListener
te żądania mają charakter oneway
, aby zapewnić, że:
Android nie opóźnia HAL podczas przetwarzania prośby o zaznaczenie. HAL powinien
nie czekaj na skupienie się przed odtworzeniem dźwięku o znaczeniu krytycznym dla bezpieczeństwa. To opcjonalne
umożliwia wsłuchiwanie się przez HAL i reagowanie na zmiany
IAudioControl#onAudioFocusChange
Usługa skupiania uwagi na samochodowym urządzeniu audio
W Androidzie 14 firma AAOS wprowadziła usługi wtyczek OEM, aby umożliwić i elastyczności dla niektórych komponentów samochodowych. Dla: Car Audio Plugin Service, wtyczka pozwala producentom OEM zarządzać prośbami o ostrość przechwyconymi przez system audio w samochodzie posprzedażna. Daje to producentom OEM większą elastyczność w zakresie ukierunkowania ich działań zgodnie z potrzebami. nie narusza zasad. W związku z tym interakcja z dźwiękiem może się różnić w zależności od tego, od różnych producentów w różnych regionach. Podstawowe założenie dotyczące skupienia się na dźwięku aplikacje nadal powinny prosić o koncentrację, aby lepiej zarządzać dźwiękiem. aby poprawić wrażenia użytkowników. Ogólnie w przypadku reklam audio nadal obowiązują pewne zasady żądania skupienia według aplikacji:
Bez dźwięku o wysokim priorytecie (w tym podczas rozmowy telefonicznej) na stojąco, aplikacji z alertami o zagrożeniu lub powiadomieniami o bezpieczeństwie). mogą tymczasowo albo na stałe.
Gdy aktywny jest media fokus:
Aplikacje, które proszą o skoncentrowanie się na połączeniach, powinny mieć możliwość odebrania połączenia jednocześnie lub wyłącznie.
Aplikacje wymagające skupienia się na korzystaniu z nawigacji powinny mieć taką możliwość i skupiać się jednocześnie lub na wyłączność.
Aplikacje wymagające koncentracji na korzystaniu z Asystenta powinny być w stanie skupić się na wykorzystaniu albo równocześnie albo wyłącznie.
Gdy stoisz na obrazie o wysokim priorytecie (w tym podczas rozmowy telefonicznej, alertów o zagrożeniu lub powiadomień bezpieczeństwa), wszystkie przychodzące w razie potrzeby żądanie opóźnionego skupienia dźwięku należy zaakceptować lub opóźnić.
Chociaż powyższe sugestie nie są wyczerpujące, mogą pomóc w przypadku aplikacji, które aby uzyskać ostrość, jeśli nie ma żadnych aktywnych dźwięków o wysokim priorytecie. Nawet wysoka dźwięki priorytetowe są aktywne, opóźnione żądania ostrości nadal powinny być respektowane i powinien być w stanie skupić się na obrazie, gdy dźwięk o wysokim priorytecie zostanie zatrzymany.