Steuerung der Audioausgabe ermöglichen

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:

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);
  }
}