2013-03-27 11 views
29

Sto scrivendo un'app per Android che alza il volume e suona una canzone per 45 secondi e poi si ferma. Funziona benissimo, ma posso solo far alzare il volume fino al 50%, c'è un modo per aumentare il volume fino al 100% usando setVolume()?Come girare il volume a max a livello di programmazione su Android?

Questo è il mio codice:

final MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1); 

//plays eye of the tiger for 45 seconds 
if (messages.contains("MUSIC ONLY")){ 

    //turn up the volume 
    mp.setVolume(20, 20); 
    mp.start(); 

    //play ring tone for 45 seconds 
    new Timer().schedule(new TimerTask() { 
     @Override 
     public void run() { 
      mp.stop(); 
     } 
    }, 45000); 
} 
+2

Sembra terribilmente odioso. Posso capire perché l'API potrebbe limitare il tuo volume al 50%. –

+0

In ogni caso: http://sagistech.blogspot.com/2010/07/setting-android-volume-programmatically.html e il duplicato collegato nella tua domanda, sopra. In sostanza, si desidera utilizzare la classe AudioManager, non la classe MediaPlayer. –

+0

@RobertHarvey: se questa limitazione del 50% è vera, suppongo che ciò sia dovuto alla protezione dell'udito. Questo è quello che succede quando imposti il ​​volume in stock Android: ti consente di andare al 50%, poi ti chiede se sei sicuro di voler andare più in alto in quanto potrebbe danneggiare l'udito. ** Modifica: ** [dai documenti] (http://developer.android.com/reference/android/media/MediaPlayer.html): 'Questa API è consigliata per bilanciare l'output di flussi audio all'interno di un'applicazione. - Quindi se il volume di sistema è al 50%, 'MediaPlayer.setVolume()' non andrà al di sopra di esso. – kamituel

risposta

58

È possibile utilizzare il seguente frammento, usando AudioManager:

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

am.setStreamVolume(
    AudioManager.STREAM_MUSIC, 
    am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 
    0); 

Questo imposta il volume al livello massimo (getStreamMaxVolume()) per il STREAM_MUSIC (che è ad esempio una canzone suonata). Per altri tipi di suoni, utilizza un valore diverso, ad esempio STREAM_RING, ecc.

+0

Ho provato a utilizzare AudioManager in precedenza, ma per qualche ragione a eclipse non piace getSystemService (String) -> è sottolineato in rosso e mi chiede di creare un metodo con quel nome. Ho importato AudioManager ma non sono sicuro di come correggere il problema altrimenti. Qualche idea? – Sarah

+6

@Sarah - è 'Context.getSystemService()' in realtà. Quindi è necessario disporre di un oggetto 'Context' (ad esempio un' Activity' o 'Service'.) Da quale classe si chiama? – kamituel

+1

Come posso impostare il volume al centro? –

Problemi correlati