Les utilisateurs s'attendent à pouvoir contrôler le volume d'une application audio. Comportement standard inclut la possibilité d'utiliser les commandes de volume (que ce soit sur les boutons ou les curseurs de l'interface utilisateur), et éviter d'en diffuser soudainement périphérique comme un casque est déconnecté en cours d'utilisation.
Utilisation des commandes de volume
Lorsqu'un utilisateur appuie sur une touche de volume dans un jeu ou une application musicale, le volume doit même si le lecteur est en pause entre les titres ou qu'il n'y a pas de musique pour le la position actuelle du jeu.
Android utilise des flux audio distincts pour la musique, les alarmes notifications, la sonnerie des appels entrants, les sons du système, le volume des appels et les notifications DTMF tons clairs. Les utilisateurs peuvent ainsi contrôler le volume de chaque diffusion de manière indépendante.
Par défaut, le fait d'appuyer sur la commande de volume modifie le volume de l'audio actif. flux. Si votre application ne lit rien en ce moment, appuyez sur les boutons de volume. règle le volume de la musique (ou du volume de la sonnerie avant Android 9).
À moins que votre appli ne soit un réveil, vous devez lire du contenu audio
AudioAttributes.USAGE_MEDIA
Pour vous assurer que les commandes de volume s'ajustent
le flux approprié, vous devez appeler
setVolumeControlStream()
en transmettant le type de flux correspondant à vos attributs que vous pouvez récupérer
AudioAttributes.getVolumeControlStream
Kotlin
setVolumeControlStream(AudioManager.STREAM_MUSIC)
Java
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Effectuez cet appel dans le cycle de vie de votre application, généralement à partir de onResume()
de l'activité ou du fragment qui contrôle votre contenu multimédia. Cela permet de relier
les commandes de volume sur STREAM_MUSIC
chaque fois que l'activité ou le fragment cible
est visible.
Contrôler le volume de flux de manière automatisée
Dans de rares cas, vous pouvez régler le volume d'un flux audio de manière programmatique. Pour
lorsque votre application remplace une interface utilisateur existante. Cela n'est pas recommandé, car
le AudioManager
d'Android mélange tous les flux audio du même type.
Ces méthodes modifient le volume de chaque application qui utilise le flux. Évitez d'utiliser
:
adjustStreamVolume()
adjustSuggestedStreamVolume()
adjustVolume()
setStreamVolume() setStreamVolume()
setStreamSolo()
setStreamMute()
Utiliser des appareils à volume fixe
Certains appareils (comme les Chromebooks) disposent de commandes de volume, mais n'autorisent pas les applications à utiliser AudioManager
décrites ci-dessus pour modifier le niveau d'un flux audio. On les appelle
volume fixe. Vous pouvez découvrir si votre
L'application s'exécute sur un appareil à volume fixe en appelant isVolumeFixed()
.
Une application audio doit permettre d'équilibrer
son volume de sortie avec d'autres applications
qui pourraient être lues sur le même flux.
Sur les appareils à volume fixe, l'application doit connecter ses propres commandes de volume au
méthode setVolume()
appropriée dans le tableau ci-dessous:
Joueur | Méthode |
---|---|
Piste audio | AudioTrack.setVolume() |
MediaPlayer | MediaPlayer.setVolume() |
ExoPlayer | Utilisez SimpleExoPlayer.setVolume() pour définir le volume de la piste audio sous-jacente. |
Ne soyez pas bruyant
Les utilisateurs disposent de plusieurs options pour profiter de l'audio de leurs appareils Android. La plupart des appareils sont équipés d'un haut-parleur intégré, de connecteurs casque pour casques filaires et nombre d’entre eux proposent également une connectivité Bluetooth et prennent en charge Audio A2DP
Lorsqu'un casque est débranché ou qu'un appareil Bluetooth est déconnecté, le flux audio redirige automatiquement vers le haut-parleur intégré. Si vous écoutez de la musique à une température élevée ce volume peut être bruyant.
Les utilisateurs s'attendent généralement à des applications qui incluent un lecteur de musique avec lecture à l'écran. pour mettre la lecture en pause. D'autres applications, comme les jeux incluent des commandes, doivent continuer à jouer. L'utilisateur peut régler le volume à l'aide de la commandes matérielles de l'appareil.
Lorsque la sortie audio revient sur le haut-parleur intégré, le système diffuse une ACTION_AUDIO_BECOMING_NOISY
l'intention. Vous devez créer un BroadcastReceiver
qui écoute cet intent chaque fois que vous lisez du contenu audio. Votre récepteur devrait se présenter comme suit:
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 } } }
Enregistrez le récepteur lorsque vous commencez la lecture et annulez-le à l'arrêt.
Si vous concevez votre application comme indiqué dans ce guide, ces appels doivent apparaître
dans les rappels de session multimédia onPlay()
et 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); } }