Nutzer erwarten, dass sie die Lautstärke einer Audio-App regeln können. Standardverhalten können Sie die Lautstärketasten (Tasten oder Drehknöpfe am Gerät oder Schieberegler in der Benutzeroberfläche) und um zu vermeiden, dass der Ton plötzlich laut erscheint, wenn ein Peripheriegeräte wie Kopfhörer werden während der Verwendung vom Netzwerk getrennt.
Lautstärkeregler verwenden
Wenn ein Nutzer in einem Spiel oder einer Musik-App eine Lautstärketaste drückt, sollte die Lautstärke auch wenn der Player zwischen den Songs pausiert wurde oder keine Musik aktuellen Standort des Spiels.
Android verwendet separate Audiostreams für Musik, Wecker, Benachrichtigungen, Klingelton für eingehende Anrufe, Systemtöne, Lautstärke für laufende Anrufe und DTMF Töne. So können Nutzer die Lautstärke jedes Streams einzeln steuern.
Standardmäßig wird durch Drücken des Lautstärkereglers die Lautstärke des aktiven Audios verändert . Wenn in deiner App gerade nichts abgespielt wird, drücke die Lautstärketasten die Musiklautstärke bzw. die Klingeltonlautstärke vor Android 9 anpasst.
Sofern deine App kein Wecker ist, solltest du Audioinhalte wiedergeben
AudioAttributes.USAGE_MEDIA
Damit die Lautstärkeregelung
richtigen Stream finden, sollten Sie einen Aufruf
setVolumeControlStream()
übergeben Sie den Streamtyp, der Ihren Attributen entspricht, die Sie über
AudioAttributes.getVolumeControlStream
.
Kotlin
setVolumeControlStream(AudioManager.STREAM_MUSIC)
Java
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Tätigen Sie diesen Aufruf im Lebenszyklus Ihrer App, in der Regel ab dem onResume()
.
Methode der Aktivität oder des Fragments, über das bzw. das deine Medien gesteuert werden. Dadurch wird eine Verbindung
den Lautstärkeregler auf STREAM_MUSIC
, wenn die Zielaktivität oder das Fragment
sichtbar ist.
Streamlautstärke programmatisch steuern
In seltenen Fällen können Sie die Lautstärke eines Audiostreams programmatisch festlegen. Für
Beispiel, wenn deine App eine vorhandene UI ersetzt. Dies wird nicht empfohlen, weil
Das Android-AudioManager
vermischt alle Audiostreams desselben Typs.
Mit diesen Methoden ändern Sie die Lautstärke aller Apps, die den Stream verwenden. Vermeiden Sie
sie:
adjustStreamVolume()
adjustSuggestedStreamVolume()
adjustVolume()
setStreamVolume() setStreamVolume()
setStreamSolo()
setStreamMute()
Mit Geräten mit festem Volumen arbeiten
Einige Geräte (z. B. Chromebooks) haben zwar die Lautstärkeregelung, lassen aber nicht zu, dass Apps die AudioManager
verwenden können
um die Lautstärke eines Audiostreams zu ändern. Diese werden als
Geräte mit festem Volumen. Sie können herausfinden, ob Ihre
App wird durch Aufrufen von isVolumeFixed()
auf einem Gerät mit festem Volumen ausgeführt.
Eine Audio-App sollte die Möglichkeit bieten,
mit anderen Apps, die in demselben Stream laufen.
Auf Geräten mit fester Lautstärke sollte die App ihre eigenen Lautstärkeregler mit dem
Entsprechende setVolume()
-Methode in der Tabelle unten:
Spieler | Method |
---|---|
Audiotrack | AudioTrack.setVolume() |
MediaPlayer | MediaPlayer.setVolume() |
ExoPlayer | Mit SimpleExoPlayer.setVolume() wird die Lautstärke des zugrunde liegenden Audiotracks festgelegt. |
Nicht lauter sein
Nutzer haben eine Reihe von Alternativen, wenn es darum geht, das Audio von ihre Android-Geräte. Die meisten Geräte haben einen integrierten Lautsprecher, kabelgebundenen Headsets. Viele bieten auch Bluetooth-Verbindung und Unterstützung für A2DP Audio.
Wenn ein Headset vom Stromnetz getrennt oder ein Bluetooth-Gerät getrennt ist, wird der Audiostream wird automatisch zum eingebauten Lautsprecher weitergeleitet. Wenn Sie Musik in hoher Qualität hören kann das eine Überraschung sein.
Nutzer erwarten in der Regel Apps, die einen Musikplayer mit Bildschirmwiedergabe enthalten um die Wiedergabe anzuhalten. Andere Apps, z. B. Spiele, Steuerelemente enthalten, sollte weiter abgespielt werden. Der Nutzer kann die Lautstärke über die die Hardware-Steuerung des Geräts.
Wenn der Audioausgang zurück zum eingebauten Lautsprecher wechselt, sendet das System eine ACTION_AUDIO_BECOMING_NOISY
die Nutzerabsicht verstehen. Sie sollten eine BroadcastReceiver
erstellen
die auf diesen Intent achtet, wenn Sie Audio wiedergeben. Der Empfänger sollte nun so aussehen:
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 } } }
Registrieren Sie den Receiver, wenn Sie die Wiedergabe starten, und heben Sie die Registrierung auf, wenn Sie die Wiedergabe beenden.
Wenn Sie Ihre App wie in diesem Leitfaden beschrieben entwerfen, sollten diese Aufrufe
in den Callbacks der Mediensitzung onPlay()
und 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); } }