2013-03-27 13 views
29

Ich schreibe eine App für Android, die die Lautstärke erhöht und ein Lied für 45 Sekunden spielt und dann stoppt. Das funktioniert gut, aber ich kann nur die Lautstärke auf 50% erhöhen. Gibt es eine Möglichkeit, die Lautstärke mit setVolume() auf 100% zu erhöhen?Wie programmiere ich die Lautstärke auf Android?

Dies ist mein Code:

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

Das scheint schrecklich anstößig. Ich kann sehen, warum die API Sie auf 50% Volumen beschränken könnte. –

+0

In jedem Fall: http://sagistech.blogspot.com/2010/07/setting-android-volume-programmatically.html, und das Duplikat in Ihrer Frage verlinkt, oben. Grundsätzlich möchten Sie die AudioManager-Klasse und nicht die MediaPlayer-Klasse verwenden. –

+0

@RobertHarvey - wenn diese 50% -Begrenzung tatsächlich wahr ist, würde ich meinen, dass das wegen des Gehörschutzes ist. Das ist, was passiert, wenn Sie die Lautstärke auf dem Android-Gerät einstellen - es geht um 50% und fragt dann, ob Sie sicher sind, dass Sie höher gehen möchten, da dies Ihr Gehör schädigen kann. ** Bearbeiten: ** [aus der Dokumentation] (http://developer.android.com/reference/android/media/MediaPlayer.html): 'Diese API wird empfohlen, um die Ausgabe von Audiostreams innerhalb einer Anwendung auszugleichen.' - Wenn die Systemlautstärke 50% beträgt, wird 'MediaPlayer.setVolume()' nicht darüber hinausgehen. – kamituel

Antwort

58

Sie das folgende Snippet verwenden können, mit AudioManager:

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

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

Dadurch wird die Lautstärke auf den Höchstwert setzt (getStreamMaxVolume()) für die STREAM_MUSIC (was zum Beispiel ein Lied gespielt). Für andere Arten von Sounds, verwenden Sie einen anderen Wert, wie STREAM_RING usw.

+0

Ich habe versucht, AudioManager vorher zu verwenden, aber aus irgendeinem Grund eclipse nicht wie getSystemService (String) -> es ist rot unterstrichen und fordert mich auf, eine Methode mit diesem Namen zu erstellen. Ich habe AudioManager importiert, aber ich bin mir nicht sicher, wie ich dieses Problem anders beheben kann. Irgendwelche Ideen? – Sarah

+6

@Sarah - es ist tatsächlich 'Context.getSystemService()'. Sie müssen also ein 'Context'-Objekt haben (wie zum Beispiel' Activity' oder 'Service'. Aus welcher Klasse rufen Sie es an? – kamituel

+1

Wie kann ich die Lautstärke auf die Mitte einstellen? –

Verwandte Themen