web-dev-qa-db-fra.com

Changer le volume des médias dans Android?

Puis-je changer le volume multimédia? et comment? Je l'ai utilisé jusqu'à présent:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

Mais ayez une barre de recherche et souhaitez changer le volume du média, pas le volume de la sonnerie.

Quelqu'un peut-il donc me montrer comment changer simplement le volume du média dans onCreate() et je corrigerai la barre de recherche plus tard.

50
carefacerz

La bonne méthode à utiliser serait setStreamVolume sur votre AudioManager. Cela pourrait ressembler à ceci

AudioManager audioManager = 
    (AudioManager)getSystemService(Context.AUDIO_SERVICE);

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                             [int value],
                             [if desired a flag]);

Un exemple d'utilisation du drapeau est d'obtenir le bip lors du réglage du volume afin que l'utilisateur puisse entendre le résultat. Le drapeau pour cela serait AudioManager.FLAG_PLAY_SOUND.

Vous pouvez utiliser AudioManager.FLAG_SHOW_UI Si vous ne voulez pas jouer un son mais afficher un toast avec la valeur actuelle. L'utilisation doit obtenir un feedback. Peu importe si elle est audible ou visuelle.

Pour obtenir la valeur valide maximale pour le flux donné, il vous suffit d'appeler getStreamMaxVolume() sur le AudioManager et de récupérer un entier qui représente ... eh bien la valeur valide maximale pour le volume.

85
Octavian Damiean
private AudioManager audio;

À l'intérieur surCréer:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

Remplacer onKeyDown:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_VOLUME_UP:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
        return true;
    case KeyEvent.KEYCODE_VOLUME_DOWN:
        audio.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
        return true;
    default:
        // return false;
        // Update based on @Rene comment below:
        return super.onKeyDown(keyCode, event);
    }
}
38
trgraglia

Vous pouvez utiliser le code suivant pour gérer le volume à l'aide d'un SeekBar:

AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

SeekBar sbVolumeBooster = (SeekBar) findViewById(R.id.sbVolumeBooster);
sbVolumeBooster.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)); 
sbVolumeBooster.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));  

sbVolumeBooster.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
{
    @Override
    public void onStopTrackingTouch(SeekBar arg0) 
    {
    }

    @Override
    public void onStartTrackingTouch(SeekBar arg0) 
    {
    }

    @Override
    public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) 
    {
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                progress, 0);  // 0 can also be changed to AudioManager.FLAG_PLAY_SOUND
    }
});
8
Xar E Ahmer

Donner un 0 - dans les drapeaux évite d'avoir un indicateur visuel et audio. C'est bien lorsque vous implémentez votre propre barre audio et indicateur et que vous ne voulez pas Android ajouter quoi que ce soit.

4
Yoni

Utilisez adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, flags);

http://developer.Android.com/reference/Android/media/AudioManager.html#adjustStreamVolume (int , int, int)

1
Computerish