2011-01-04 19 views
42

C'è un modo per ottenere/impostare il volume multimediale? Ho provato il seguente:Come si ottiene/imposta il volume multimediale (non il volume della suoneria) in Android?

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_RING); 

ma restituisce il volume della suoneria.

+1

Viene visualizzata anche la risposta che ho fornito la finestra di dialogo del volume che mostra quando si utilizza il controllo del volume dell'hardware. – trgraglia

risposta

41

Invece di AudioManager.STREAM_RING si utilizza AudioManager.STREAM_MUSIC Questa domanda è già stata discussa here.

+1

Un esempio rapido può essere trovato anche qui: http://stackoverflow.com/a/5446346/491044 – trgraglia

+0

Puoi aiutarmi in questa domanda sul volume? http://stackoverflow.com/questions/35256364/volume-always-the-same –

56
private AudioManager audio; 

All'interno onCreate:

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

Override 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; 
    } 
} 
+1

hai fatto la mia giornata, la soluzione ha funzionato molto bene, esattamente quello di cui avevo bisogno. Solo per far sapere a tutti, questo mostra il popup con barra di avanzamento del volume Media e consente di selezionare facilmente il volume nella vostra applicazione. Grazie. – Alin

+0

Nessun problema ... Ovviamente puoi gestire anche altre cose con l'istruzione switch, ad esempio menu e pulsante indietro. – trgraglia

+3

È troppo difficile. E produce un suono indesiderato come l'utente ha cambiato il volume della suoneria. Le migliori soluzioni sono: http://stackoverflow.com/a/10919403/148387 – Vadim

5

Il seguente codice imposterà il volume flusso multimediale al massimo:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 
    audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 
    AudioManager.FLAG_SHOW_UI); 
6

Se vi capita di avere una barra del volume che si desidera Regola - Simile a quello che vedi nell'app per iPod di iPhone - ecco come.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    switch (keyCode) { 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
     //Raise the Volume Bar on the Screen 
     volumeControl.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) 
       + AudioManager.ADJUST_RAISE); 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     //Adjust the Volume 
     audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); 
     //Lower the VOlume Bar on the Screen 
     volumeControl.setProgress(audioManager 
       .getStreamVolume(AudioManager.STREAM_MUSIC) 
       + AudioManager.ADJUST_LOWER); 
     return true; 
    default: 
     return false; 
    } 
26

avere una prova con questo:

setVolumeControlStream(AudioManager.STREAM_MUSIC);

+4

Quote:" Potresti essere tentato di provare e ascoltare la pressione del tasto del volume e modificare il volume del tuo flusso audio in questo modo. Resistere all'impulso. Android fornisce il pratico metodo setVolumeControlStream() per dirigere la pressione del tasto del volume sul flusso audio specificato. "Http://developer.android.com/training/managing-audio/volume-playback.html#HardwareVolumeKeys – EricRobertBrewer

+2

Questo è molto meglio di provate a gestire il volume da soli – strangeluck

+0

Questa dovrebbe essere la risposta e funziona anche con le attività che ereditano NativeActivity – Brent

14

È possibile impostare la vostra attività di utilizzare un volume specifico. Nella vostra attività, utilizzare una delle seguenti opzioni:

this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 
this.setVolumeControlStream(AudioManager.STREAM_RING); 
this.setVolumeControlStream(AudioManager.STREAM_ALARM); 
this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION); 
this.setVolumeControlStream(AudioManager.STREAM_SYSTEM); 
this.setVolumeControlStream(AudioManager.STREAM_VOICECALL); 
+0

@hanoo ha scritto anche questo nella sua risposta alcuni mesi fa – trgraglia

+0

Potete aiutarmi in questa domanda sul volume? http : //stackoverflow.com/questions/35256364/volume-always-the-same –

+0

qualsiasi idea su come trovare il flusso di controllo del volume corrente? da un servizio, ad esempio? – Vlad

21
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
int currentVolume = audio.getStreamVolume(AudioManager.STREAM_MUSIC); 
int maxVolume = audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 
float percent = 0.7f; 
int seventyVolume = (int) (maxVolume*percent); 
audio.setStreamVolume(AudioManager.STREAM_MUSIC, seventyVolume, 0); 
+0

'getStreamMaxVolume' è stato utile per impostare il volume. –

2

per impostare il volume a 0

AudioManager audioManager; 
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); 

Per impostare il volume al massimo

AudioManager audioManager; 
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0); 

il volume può essere regolato modifica del valore dell'indice tra 0 e 20

Problemi correlati