Audiofokus

Vor dem Starten eines logischen Streams fordert eine App den Audiofokus mit demselben Audioattribute, die für den logischen Stream verwendet werden. Die App muss den Fokus respektieren. um erwartungsgemäße Verluste in Anwendungsfällen zu erzielen.

Das Senden einer Fokusanfrage wird zwar empfohlen, wird aber vom System nicht erzwungen. Ziehen Sie den Fokus daher in Betracht, um Konflikte indirekt zu kontrollieren und zu vermeiden. während der Wiedergabe statt als primäres Audiosteuerelement. Das Fahrzeug sollte für den Betrieb des Audiosubsystems nicht vom Fokussystem abhängen.

Interaktionen fokussieren

Zur Unterstützung von AAOS werden Anfragen für Audiofokus basierend auf vordefinierten Interaktionen zwischen dem CarAudioContext der Anfrage und dem des aktuellen fokussiert bleiben. Es gibt drei Arten von Interaktionen:

  • Exklusiv
  • Ablehnen
  • Gleichzeitig

Exklusive Interaktion

Dies ist das am häufigsten bei Android verwendete Interaktionsmodell.

Bei exklusiven Interaktionen darf jeweils nur eine App den Fokus festlegen. Daher wird einer eingehenden Fokusanfrage der Fokus gewährt, während der vorhandene Fokus verliert den Fokus. Da in beiden Apps Medien wiedergegeben werden, darf nur eine App den Aufbewahrungsmodus nutzen fokussiert. Daher wird die Fokusanfrage der neu gestarteten App mit AUDIOFOCUS_REQUEST_GRANTED, während die App, die gerade Musik wiedergibt, ein Fokusänderungsereignis mit einem Verluststatus, der dem Typ der Anfrage entspricht was gemacht wurde.

Interaktion ablehnen

Bei Interaktionen vom Typ reject (ablehnen) wird die eingehende Anfrage immer abgelehnt. Für wenn Sie versuchen, während eines Anrufs Musik abzuspielen. In dieser Wenn die Telefon App den Audiofokus für einen Anruf hält und eine zweite App den Fokus anfordert zum Abspielen von Musik erhält die Musik-App AUDIOFOCUS_REQUEST_FAILED als Antwort zur Anfrage hinzufügen. Da die Fokusanfrage abgelehnt wird, wird kein Fokusverlust gesendet. mit dem aktuellen Fokus.

Gleichzeitige Interaktion

Bei AAOS gibt es nur gleichzeitige Interaktionen. Dadurch können Apps, die Audio anfordern, damit du dich auch im Auto auf andere Apps konzentrieren kannst. Für eine gleichzeitige Interaktion stattfinden soll, müssen die folgenden Bedingungen erfüllt sein. Die:

Wenn diese Kriterien erfüllt sind, wird die Fokusanfrage mit AUDIOFOCUS_REQUEST_GRANTED, während der aktuelle Fokusinhaber keine Änderung bei der fokussiert. Entscheidet sich der aktuelle Fokusinhaber jedoch dafür, Duck-Events zu empfangen oder wenn das Motiv in den Fokus genommen wird, verliert der aktuelle Fokushalter den Fokus, wie es bei exklusive Interaktion.

Gleichzeitige Streams verarbeiten

Auch wenn die gleichzeitige Interaktion vielfältig eingesetzt werden kann, sollten Sie beim Mischen und auf Hardwareebene zwischen Ausgabegeräten. Wir empfehlen dringend, CarAudioContext, die gleichzeitig gespielt werden dürfen, sollten an folgende Adresse weitergeleitet werden: verschiedene Ausgabegeräte.

Durch separate Ausgabegeräte für gleichzeitige Streams wird der HAL aktiviert. eines der Streams vor dem Mischen aus der Masse ziehen verschiedenen Lautsprechern im Fahrzeug verbinden. Wenn die logischen Streams Android-Geräte werden Vorteile unverändert übernommen und als Teil desselben physischen Streams übermittelt.

Wenn zum Beispiel Navigation und Medien gleichzeitig ausgeliefert werden, erhöht sich die für den Medienstream vorübergehend reduziert werden, sind die Navigationsanweisungen besser zu hören. Alternativ kann die Navigation wird der Stream möglicherweise über die Lautsprecher auf der Fahrerseite geleitet, während die Medien weiter wiedergegeben werden. im Rest der Hütte spielen.

Interaktionsmatrix

Die folgende Tabelle zeigt die durch CarAudioService definierte Interaktionsmatrix. Jede Zeile steht für den CarAudioContext des aktuellen Fokusinhabers und jeden der eingehenden Anfrage.

Beispiel: Eine Musikmedien-App fokussiert auf den Fokus, während eine Navigations-App anfordert. zeigt die Matrix an, dass die beiden Interaktionen gleichzeitig abgespielt werden können. unter der Annahme der anderen Kriterien gleichzeitige Interaktionen erfüllt sind.

Aufgrund der gleichzeitigen Interaktionen ist es möglich, dass mehrere fokussiert bleiben. In diesem Fall wird eine eingehende Fokusanfrage mit jeder der fokussierenden Personen steht, bevor entschieden wird, welche Interaktion anzuwenden ist. In dieser gewinnt die konservativste Interaktion. Ablehnen, dann Exklusiv und gleichzeitig ausgeführt werden.

Audiofokus-Interaktionsmatrix

Abbildung 1: Audiofokus-Interaktionsmatrix.

In Android 11 wurde eine neue Nutzereinstellung eingeführt, mit der Nutzer zwischen der Navigation und Telefonanrufen. Wenn festgelegt, android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL ändert die Interaktion zwischen eingehenden NAVIGATION-Fokusanfragen und aktuellen CALL-Anfragen von gleichzeitig auf ablehnen konzentrieren. Wenn Nutzende das möchten, Anrufe werden nicht unterbrochen, sie können die Einstellung aktivieren. Dieses bleiben für den Nutzer erhalten und können dynamisch festgelegt werden, sodass sich der Fokus wird die neue Einstellung berücksichtigt.

Verzögerter Audiofokus

In Android 11 bietet AAOS jetzt eine Unterstützung für die Anforderung eines verzögerten Audiofokus. Dieses können nicht vorübergehende Fokusanfragen verzögert werden, wenn ihre Interaktion mit aktuellen Fokusinhabern würden in der Regel dazu führen, dass sie abgelehnt werden. Sobald ein Eine Änderung des Fokus führt zu einem Zustand, in dem die verzögerte Anfrage fokussiert werden kann. wird die Anfrage genehmigt.

Regeln für verzögerte Anfragen für den Audiofokus

  • Nur nicht vorübergehende Anfragen. Eine verzögerte Anfrage ist nur möglich für nicht-temporäre Quellen, um zu vermeiden, dass ein vorübergehender Ton lange abgespielt wird wenn sie relevant ist.

  • Es kann jeweils nur eine Anfrage verzögert werden. Wenn eine verspätete Anfrage wenn es bereits einen verzögerten Antrag gibt, wird der ursprüngliche verzögerte Antrag erhält ein AUDIOFOCUS_LOSS-Änderungsereignis und die neue Anfrage ein synchrone Antwort von AUDIOFOCUS_REQUEST_DELAYED.

  • Verzögerte Anfragen müssen einen OnAudioFocusChangeListener haben. Sobald ein -Anfrage verzögert ist, wird der Listener verwendet, um den Anforderer zu benachrichtigen, wenn der Der Antrag wird schließlich genehmigt (AUDIOFOCUS_GAIN) oder später abgelehnt. (AUDIOFOCUS_LOSS)

Verzögerter Fokus anfordern

So erstellen Sie eine Anfrage, die verzögert werden kann:

  1. AudioFocusRequest.Builder#setAcceptsDelayedFocusGain verwenden.

    mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener();
    
    mDelayedFocusRequest = new AudioFocusRequest
         .Builder(AudioManager.AUDIOFOCUS_GAIN)
         .setAudioAttributes(mMusicAudioAttrib)
         .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener)
         .setForceDucking(false)
         .setWillPauseWhenDucked(false)
         .setAcceptsDelayedFocusGain(true)
         .build();
    
  2. Verarbeiten Sie beim Stellen der Anfrage die AUDIOFOCUS_REQUEST_DELAYED-Antwort:

    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. Wenn die Anfrage verzögert ist, verarbeitet der Fokus-Listener Änderungen im Fokus:

    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
    

Fokusverwaltung in mehreren Zonen

Bei Fahrzeugen mit mehreren Audiozonen wird der Audiofokus unabhängig verwaltet für jede Zone. Daher wird bei einer Anfrage an eine Zone nicht berücksichtigt, hält den Fokus in anderen Bereichen auf und lenkt verlieren Sie den Fokus. So kann der Fokus der Hauptkabine getrennt von einem auf dem Rücksitz-Entertainment-System, ohne dass die Audiowiedergabe in eines Bereichs durch Änderungen, die im Fokus auf einem anderen vorgenommen wurden.

Bei allen Apps verwaltet CarAudioService automatisch den Fokus. Fokus Die Audiozone der Anfrage wird durch die zugehörige UserId oder UID bestimmt Weitere Informationen finden Sie unter Audiorouting.

Audio aus mehreren Zonen gleichzeitig anfordern

Wenn eine App Audio in mehreren Zonen gleichzeitig wiedergeben möchte, muss sie für jede Zone fokussieren, indem Sie AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID in das Feld Set:

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

Mit diesem Bundle-Parameter kann der Anfragende die automatische Audiozone überschreiben Zuordnungen stattdessen die angegebene Zonen-ID. Daher kann eine App separate Anfragen für verschiedene Audiozonen.

HAL-Audiofokus

Ab Android 11 ist der HAL aktiviert, um den Fokus im Namen von externen Streams. Die Verwendung dieser APIs ist zwar optional, wird aber dringend empfohlen, externe Geräusche ermöglichen, optimal an der Android-Umgebung teilzunehmen. um eine nahtlose User Experience zu bieten.

Der HAL entscheidet letztendlich, welche Töne Priorität haben sollen. In diesem Fall sollten Notfall- und sicherheitsrelevante Geräusche unabhängig davon abgespielt werden, ob dem HAL Audiofokus gewährt wurde und ob er korrekt wiedergegeben, auch wenn der HAL den Audiofokus verliert. Dasselbe gilt für Töne, die gemäß behördlichen Bestimmungen erforderlich sind.

Der HAL sollte Android-Streams bei der Wiedergabe proaktiv stummschalten. Notfall- oder sicherheitsrelevante Geräusche, damit sie klar zu hören sind.

AudioControl@2.0

In Version 2.0 von AudioControl HAL wurden die folgenden neuen APIs eingeführt:

API Zweck
IAudioControl#registerFocusListener Registriert eine Instanz von IFocusListener beim AudioControl HAL. Dieser Listener ermöglicht dem HAL, Audio anzufordern und zu verwerfen fokussiert. Der HAl stellt eine ICloseHandle-Instanz zur Verwendung durch Android, um die Registrierung des Listeners aufzuheben.
IAudioControl#onAudioFocusChange Benachrichtigt den HAL über Statusänderungen auf Fokusanfragen vom HAL bis zum IFocusListener, einschließlich der Antworten auf Fokusanfragen zu suchen.
IFocusListener#requestAudioFocus Anfragen beziehen sich auf den HAL für eine angegebene Nutzung, Zonen-ID, und „Fokus-Gewinntyp“.
IFocusListener#abandonAudioFocus Verwirft vorhandene HAL-Fokusanfragen für die angegebene Nutzung und Zone ID.

Der HAL kann mehrere Fokusanfragen gleichzeitig haben, ist jedoch auf eine beschränkt. -Anforderung pro Nutzung und Zonen-ID-Paar. Android geht sofort vom HAL aus beginnt die Wiedergabe von Tönen für eine Nutzung, sobald eine Anfrage gesendet wurde, und setzt den bis er den Fokus verlässt.

Abgesehen von registerFocusListener sind diese Anfragen oneway, um sicherzustellen, Android verzögert den HAL nicht, während eine Fokusanfrage verarbeitet wird. Der HAL sollte nicht warten, bis sicherheitskritische Töne abgespielt werden. Das ist optional. damit der HAL auf Veränderungen des Audiofokus IAudioControl#onAudioFocusChange

OEM-Auto-Audiofokusdienst

Unter Android 14 führte AAOS die Dienste für OEM-Plug-ins für Autos ein, für einige Autokomponenten. Für Car Audio Plugin Service, das Plug-in Dienst ermöglicht es OEMs, Fokusanfragen zu verwalten, die vom Audiosystem des Autos abgefangen werden Service. Dadurch erhalten OEMs bei Bedarf mehr Flexibilität bei der Verwaltung des Fokus. nach Regeln und Vorschriften. Daher können sich die Audiofokus-Interaktion zwischen und von Region zu Region unterscheiden. Die grundlegende Voraussetzung für den Audiofokus weiterhin hält, sollten Apps trotzdem den Fokus für eine bessere Audioverwaltung anfordern. um die User Experience zu verbessern. Generell gelten für Audioanzeigen weiterhin bestimmte Regeln. Fokusanfrage durch Apps:

  • Ohne Stehen und Audiofokus mit hoher Priorität (einschließlich Telefonanrufe, Notfallbenachrichtigungen oder Sicherheitsbenachrichtigungen) vorübergehend oder dauerhaft konzentrieren.

  • Während ein Medienfokus aktiv ist:

    • Apps, die den Schwerpunkt auf die Anrufnutzung anfordern, sollten den Anruf entweder gleichzeitig oder exklusiv.

    • Apps, die den Schwerpunkt auf die Navigationsnutzung anfordern, sollten in der Lage sein, Navigation zu empfangen. gleichzeitig oder exklusiv konzentrieren.

    • Apps, die den Schwerpunkt auf die Nutzung von Assistant anfordern, sollten Zugriff auf den Nutzungsfokus haben entweder gleichzeitig oder exklusiv.

  • Während des Stehens eines Audiofokus mit hoher Priorität (einschließlich eines Telefonanrufs, Notfallbenachrichtigungen oder Sicherheitsbenachrichtigungen) aktiv sind, alle eingehenden Die verzögerte Anfrage für den Audiofokus sollte bei Bedarf gewährt oder verzögert werden.

Auch wenn die Vorschläge oben nicht vollständig sind, können sie Apps helfen, die Fokus fokussieren, um den Fokus zu erhalten, wenn keine aktiven Töne mit hoher Priorität vorhanden sind. Selbst bei hohen Wichtige Töne sind aktiv. Verzögerte Fokusanfragen sollten trotzdem berücksichtigt werden. und sollte fokussiert werden können, wenn der Ton mit hoher Priorität aufhört.