Użytkownicy oczekują możliwości sterowania głośnością aplikacji audio. Standardowe zachowanie umożliwia sterowanie głośnością (przyciskami lub pokrętłami na urządzenia lub suwaków w interfejsie) oraz uniknąć nagłego odtwarzania na głos, jeśli urządzenie peryferyjne, takie jak słuchawki, jest odłączone podczas używania.
Sterowanie głośnością
Gdy użytkownik naciśnie przycisk głośności w grze lub aplikacji muzycznej, głośność powinna zmieniać nawet wtedy, gdy odtwarzanie muzyki zostało wstrzymane między utworami lub jeśli nie słyszysz muzyki miejsce gry.
Android używa osobnych strumieni audio do odtwarzania muzyki, alarmów powiadomienia, dzwonek połączenia przychodzącego, dźwięki systemowe, głośność podczas połączenia i DTMF; tony. Dzięki temu użytkownicy mogą niezależnie regulować głośność każdego strumienia.
Domyślnie naciśnięcie elementu sterującego głośnością zmienia głośność aktywnego dźwięku . Jeśli w aplikacji nic obecnie nie odtwarza, naciśnij przyciski głośności. reguluje głośność muzyki (lub głośność dzwonka przed Androidem 9).
Jeśli Twoja aplikacja nie jest budzikiem, należy odtwarzać dźwięk podczas użytkowania
AudioAttributes.USAGE_MEDIA
Aby dostosować sterowanie głośnością
do właściwego strumienia, wywołaj
setVolumeControlStream()
przekazywanie typu strumienia pasującego do atrybutów, z których można pobrać dane
AudioAttributes.getVolumeControlStream
Kotlin
setVolumeControlStream(AudioManager.STREAM_MUSIC)
Java
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Wykonaj to wywołanie w cyklu życia aplikacji, zwykle z onResume()
działania lub fragmentu, który kontroluje odtwarzanie multimediów. Łączy to
ustaw głośność na STREAM_MUSIC
za każdym razem, gdy docelowa aktywność lub fragment
jest widoczny.
Automatyczne sterowanie głośnością transmisji
W rzadkich przypadkach głośność strumienia audio można ustawić automatycznie. Dla:
np. gdy aplikacja zastępuje istniejący interfejs. Nie jest to zalecane, ponieważ
Android AudioManager
łączy ze sobą wszystkie strumienie audio tego samego typu.
Te metody zmieniają głośność każdej aplikacji, która korzysta ze strumienia. Unikaj stosowania
:
adjustStreamVolume()
adjustSuggestedStreamVolume()
adjustVolume()
setStreamVolume() setStreamVolume()
setStreamSolo()
setStreamMute()
Praca z urządzeniami o stałej głośności
Niektóre urządzenia (np. Chromebooki) mają regulację głośności, ale nie pozwalają aplikacjom na korzystanie z przycisku AudioManager
opisanych powyżej metod zmiany poziomu strumienia audio. Są to tzw.
urządzenia o stałej głośności. Możesz sprawdzić, czy
aplikacja działa na urządzeniu o stałej głośności, wywołując metodę isVolumeFixed()
.
Aplikacja audio powinna umożliwiać
jego głośność wyjściowa z innymi aplikacjami, które mogą być odtwarzane w ramach tego samego strumienia.
Na urządzeniach ze stałą głośnością aplikacja powinna mieć własne elementy sterujące głośnością
odpowiednią metodę setVolume()
w tabeli poniżej:
Zawodnik | Metoda |
---|---|
Ścieżka dźwiękowa | AudioTrack.setVolume() |
Odtwarzacz MediaPlayer | MediaPlayer.setVolume() |
ExoPlayer | Użyj opcji SimpleExoPlayer.setVolume() , która ustawia głośność ścieżki audio. |
Nie głośno
Użytkownicy mają wiele możliwości słuchania muzyki z urządzeń z Androidem. Większość urządzeń ma wbudowany głośnik i gniazda słuchawek przewodowe zestawy słuchawkowe. Wiele z nich ma też połączenie Bluetooth i obsługuje Dźwięk A2DP.
Po odłączeniu zestawu słuchawkowego lub odłączeniu urządzenia Bluetooth strumień audio przekierowuje automatycznie na wbudowany głośnik. Jeśli słuchasz muzyki na wysokim poziomie głośność, może to być głośna niespodzianka.
Użytkownicy zwykle oczekują aplikacji zawierających odtwarzacz muzyki z odtwarzaniem na ekranie aby w takim przypadku wstrzymać odtwarzanie. inne aplikacje, np. gry, które nie obsługują tej funkcji. zawierać elementy sterujące, należy kontynuować odtwarzanie. Użytkownik może dostosować głośność za pomocą do sterowania sprzętowego urządzenia.
Gdy wyjście audio przełączy się z powrotem na wbudowany głośnik, system wyśle sygnał ACTION_AUDIO_BECOMING_NOISY
intencji. Należy utworzyć BroadcastReceiver
który nasłuchuje tej intencji, gdy odtwarzasz dźwięk. Twój odbiornik powinien wyglądać tak:
Kotlin
private class BecomingNoisyReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) { // Pause the playback } } }
Java
private class BecomingNoisyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) { // Pause the playback } } }
Zarejestruj odbiornik po rozpoczęciu odtwarzania i wyrejestruj go po zatrzymaniu.
Jeśli projektujesz aplikację w sposób opisany w tym przewodniku, wywołania te powinny być widoczne
w wywołaniach zwrotnych sesji multimediów onPlay()
i onStop()
.
Kotlin
private val intentFilter = IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY) private val myNoisyAudioStreamReceiver = BecomingNoisyReceiver() private val callback = object : MediaSessionCompat.Callback() { override fun onPlay() { registerReceiver(myNoisyAudioStreamReceiver, intentFilter) } override fun onStop() { unregisterReceiver(myNoisyAudioStreamReceiver) } }
Java
private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY); private BecomingNoisyReceiver myNoisyAudioStreamReceiver = new BecomingNoisyReceiver(); MediaSessionCompat.Callback callback = new MediaSessionCompat.Callback() { @Override public void onPlay() { registerReceiver(myNoisyAudioStreamReceiver, intentFilter); } @Override public void onStop() { unregisterReceiver(myNoisyAudioStreamReceiver); } }