Aktywność audio

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:

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.

Struktura interakcji z dźwiękiem

Rysunek 1. Macierz interakcji z dźwiękiem.

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 funkcji AUDIOFOCUS_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:

  1. 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();
    
  2. 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;
    }
    
  3. 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.