Odtwarzacze audio obsługują atrybuty, które określają sposób, w jaki system audio zarządza przekierowywaniem, głośnością i decyzjami dotyczącymi skupienia w przypadku określonego źródła. Aplikacje mogą dołączać atrybuty do odtwarzania dźwięku (takich jak muzyka odtwarzana przez usługę strumieniowego przesyłania danych lub powiadomienie o nowym e-mailu), a następnie przekazywać atrybuty źródła dźwięku do platformy. System audio używa tych atrybutów do podejmowania decyzji dotyczących miksowania i powiadamiania aplikacji o stanie systemu.
W wersjach Androida 4.4 i starszych framework podejmował decyzje dotyczące miksowania, korzystając tylko z typu strumienia audio. Jednak podejmowanie takich decyzji na podstawie typu strumienia było zbyt ograniczające, aby uzyskać wysoką jakość w wielu aplikacjach i na różnych urządzeniach. Na przykład na urządzeniu mobilnym niektóre aplikacje (np. Mapy Google) odtwarzały wskazówki dojazdu za pomocą typu strumienia STREAM_MUSIC, ale na urządzeniach mobilnych w trybie rzutowania (np. Android Auto) aplikacje nie mogły łączyć wskazówek dojazdu z innymi strumieniami multimediów.
Za pomocą interfejsu Audio Attribute API aplikacje dostarczają systemowi audio szczegółowe informacje o konkretnym źródle audio, w tym o użyciu (dlaczego odtwarzane jest źródło), typie treści (co odtwarza źródło), flagach (jak należy odtwarzać źródło) i kontekstach (nowość w Androidzie 9). Składnia:
AudioAttributes {
    mUsage
    mContentType
    mSource
    mFlags
    mTags / mFormattedTags / mBundle    (key value pairs)
}- Użycie. Określa, dlaczego źródło jest odtwarzane, oraz kontroluje decyzje dotyczące kierowania, skupienia i głośności.
 - Typ treści. Określa, co jest odtwarzane przez źródło (muzyka, film, mowa, sonifikacja, nieznane).
 - Kontekst. Wartości użycia abstrakcyjne dla interfejsu Audio HAL.
 - Flagi. Określa sposób odtwarzania źródła. Obejmuje obsługę wymogu słyszalności (w niektórych krajach wymagany jest dźwięk migawki aparatu) oraz sprzętową synchronizację dźwięku i obrazu.
 
W przypadku przetwarzania dynamiki aplikacje muszą rozróżniać treści filmowe, muzyczne i mowy. Istotne mogą być też informacje o samych danych, takie jak głośność i wartość szczytowej próbki.
Używanie atrybutów
Użycie określa kontekst, w którym jest używany strumień, podając informacje o tym, dlaczego dźwięk jest odtwarzany i do czego służy. Informacje o użytkowaniu są bardziej precyzyjne niż typ strumienia i umożliwiają platformom lub zasadom routingu doprecyzowanie decyzji dotyczących wolumenu lub routingu.
W przypadku każdego wystąpienia podaj jedną z tych wartości:
- USAGE_UNKNOWN
 - USAGE_MEDIA
 - USAGE_VOICE_COMMUNICATION
 - USAGE_VOICE_COMMUNICATION_SIGNALLING
 - USAGE_ALARM
 - USAGE_NOTIFICATION
 - USAGE_NOTIFICATION_TELEPHONY_RINGTONE
 - USAGE_NOTIFICATION_COMMUNICATION_REQUEST
 - USAGE_NOTIFICATION_COMMUNICATION_INSTANT
 - USAGE_NOTIFICATION_COMMUNICATION_DELAYED
 - USAGE_NOTIFICATION_EVENT
 - USAGE_ASSISTANCE_ACCESSIBILITY
 - USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
 - USAGE_ASSISTANCE_SONIFICATION
 - USAGE_GAME
 - USAGE_VIRTUAL_SOURCE
 - USAGE_ASSISTANT
 
  Wartości atrybutu audio nie mogą się powtarzać. Przykłady znajdziesz w definicjach USAGE_MEDIA i USAGE_ALARM, a wyjątki – w definicji AudioAttributes.Builder.
Typ treści
  Typ treści określa, czym jest dźwięk, i wyraża ogólną kategorię treści, takich jak film, mowa lub sygnał dźwiękowy/dzwonek. Framework audio korzysta z informacji o typach treści do selektywnej konfiguracji bloków przetwarzania końcowego dźwięku. Podanie typu treści jest opcjonalne, ale jeśli jest on znany, należy go uwzględnić. Przykładowo w przypadku usługi strumieniowego przesyłania filmów należy użyć wartości CONTENT_TYPE_MOVIE, a w przypadku aplikacji do odtwarzania muzyki – CONTENT_TYPE_MUSIC.
W przypadku każdego wystąpienia podaj jedną z tych wartości typu treści:
CONTENT_TYPE_UNKNOWN(domyślnie)CONTENT_TYPE_MOVIECONTENT_TYPE_MUSICCONTENT_TYPE_SONIFICATIONCONTENT_TYPE_SPEECH
Wartości typu treści atrybutu audio nie mogą się powtarzać. Szczegółowe informacje o typach treści znajdziesz w interfejsie API atrybutów audio.
Konteksty
  Każdy dźwięk w Androidzie jest identyfikowany przez aplikację odpowiedzialną za jego generowanie oraz powód jego odtwarzania. Urządzenie z Androidem używa tych informacji do określenia sposobu wyświetlania dźwięku. W Androidzie 8.x i starszych aplikacje mogą zgłaszać przyczynę generowania dźwięku za pomocą starszych typów strumieni (np. AudioSystem.STREAM_MUSIC) lub AudioAttributes. W Androidzie 9 wartości AudioAttributes.usage są abstrakcyjne na poziomie HAL jako konteksty.
| Konteksty audio HAL | Użycie AudioAttributes | 
|---|---|
| MUZYCZNA | MULTIMEDIA | 
| VOICE_COMMAND | USAGE_ASSISTANT | 
| NAWIGACJA | ASSISTANCE_NAVIGATION_GUIDANCE | 
| ZADZWOŃ | VOICE_COMMUNICATION | 
| DZWONEK | NOTIFICATION_RINGTONE | 
| POWIADOMIENIE | POWIADOMIENIE | 
| ALARM | ALARM | 
| SYSTEM_SOUND | ASSISTANCE_SONIFICATION | 
| NIEZNANY | NIEZNANY | 
  W dowolnym wystąpieniu możesz podać jedną z tych wartości CONTEXT_NUMBER:
- MUSIC_CONTEXT // Odtwarzanie muzyki
 - NAVIGATION_CONTEXT // Wskazówki dotyczące trasy
 - VOICE_COMMAND_CONTEXT // Sesja polecenia głosowego
 - CALL_RING_CONTEXT // Dzwonek połączenia głosowego
 - CALL_CONTEXT // Połączenie głosowe
 - ALARM_CONTEXT // Dźwięk alarmu z Androida
 - NOTIFICATION_CONTEXT // Notifications
 - SYSTEM_SOUND_CONTEXT // Dźwięki interakcji z użytkownikiem (kliknięcia przycisków itp.)
 
Flagi
Flagi określają, jak framework audio stosuje efekty do odtwarzania dźwięku. W przypadku instancji podaj co najmniej jedną z tych flag:
FLAG_AUDIBILITY_ENFORCED. Prośba o sprawdzenie, czy dźwięk jest słyszalny. Użyj, aby zaspokoić potrzeby starszych wersjiSTREAM_SYSTEM_ENFORCED(np. wymuszenie dźwięku migawki aparatu).HW_AV_SYNC. Prosi system o wybranie strumienia wyjściowego, który obsługuje sprzętową synchronizację obrazu i dźwięku.
Flagi atrybutów audio nie są wyłączne i można je łączyć. Szczegółowe informacje o tych flagach znajdziesz w interfejsie API atrybutów audio.
Przykład
  W tym przykładzie AudioAttributes.Builder definiuje AudioAttributes, które ma być używane przez nową instancję AudioTrack:
AudioTrack myTrack = new AudioTrack(
  new AudioAttributes.Builder()
 .setUsage(AudioAttributes.USAGE_MEDIA)
    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
    .build(),
  myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);Zgodność
Deweloperzy aplikacji powinni używać atrybutów dźwięku podczas tworzenia i aktualizowania aplikacji na Androida 5.0 lub nowszego. Aplikacje nie muszą jednak korzystać z atrybutów.Mogą obsługiwać tylko starsze typy strumieni lub nie wiedzieć nic o treściach, które odtwarzają (np. ogólny odtwarzacz multimediów, który nie wie nic o odtwarzanych treściach).
W takich przypadkach framework zachowuje zgodność wsteczną ze starszymi urządzeniami i wersjami Androida, automatycznie tłumacząc starsze typy strumieni audio na atrybuty audio. Nie narzuca jednak tego mapowania ani nie gwarantuje, że będzie ono działać na różnych urządzeniach, u różnych producentów i w różnych wersjach Androida.
Mapowania zgodności:
| Android 5.0 lub nowszy | Android 4.4 i starsze | 
|---|---|
  CONTENT_TYPE_SPEECHUSAGE_VOICE_COMMUNICATION
   | 
  
  STREAM_VOICE_CALL
   | 
  CONTENT_TYPE_SONIFICATIONUSAGE_ASSISTANCE_SONIFICATION
   | 
  
  STREAM_SYSTEM
   | 
  CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATION_RINGTONE
   | 
  
  STREAM_RING
   | 
  CONTENT_TYPE_MUSICUSAGE_UNKNOWNUSAGE_MEDIAUSAGE_GAMEUSAGE_ASSISTANCE_ACCESSIBILITYUSAGE_ASSISTANCE_NAVIGATION_GUIDANCE
   | 
  
  STREAM_MUSIC
   | 
  CONTENT_TYPE_SONIFICATIONUSAGE_ALARM
   | 
  
  STREAM_ALARM
   | 
  CONTENT_TYPE_SONIFICATIONUSAGE_NOTIFICATIONUSAGE_NOTIFICATION_COMMUNICATION_REQUESTUSAGE_NOTIFICATION_COMMUNICATION_INSTANTUSAGE_NOTIFICATION_COMMUNICATION_DELAYEDUSAGE_NOTIFICATION_EVENT
   | 
  
  STREAM_NOTIFICATION
   | 
  CONTENT_TYPE_SPEECH
   | 
  
  (@hide) STREAM_BLUETOOTH_SCO
   | 
  FLAG_AUDIBILITY_ENFORCED
   | 
  
  (@hide) STREAM_SYSTEM_ENFORCED
   | 
  CONTENT_TYPE_SONIFICATIONUSAGE_VOICE_COMMUNICATION_SIGNALLING
   | 
  
  (@hide) STREAM_DTMF
   | 
Wycofane typy strumieni
Android 9 wycofuje te typy strumieni danych do użytku w samochodach:
- STREAM_DEFAULT
 - STREAM_VOICE_CALL
 - STREAM_SYSTEM
 - STREAM_RING
 - STREAM_MUSIC
 - STREAM_ALARM
 - STREAM_NOTIFICATION
 - STREAM_BLUETOOTH_SCO
 - STREAM_SYSTEM_ENFORCED
 - STREAM_DTMF
 - STREAM_TTS
 - STREAM_ACCESSIBILITY
 
Więcej informacji znajdziesz w artykule Automotive Audio.