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:
Eingehende Fokusanfrage muss nach AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
Aktueller Fokusinhaber setPauseWhenDucked(true)
Aktueller Fokusinhaber möchte keine Entenereignisse erhalten
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.
Abbildung 1: Audiofokus-Interaktionsmatrix.
Navigation bei Anrufen
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 vonAUDIOFOCUS_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:
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();
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; }
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.