2013-03-27 3 views
29

J'écris une application pour Android qui augmente le volume et joue une chanson pendant 45 secondes, puis s'arrête. Cela fonctionne très bien, mais je ne peux obtenir que 50% du volume. Y a-t-il un moyen de faire passer le volume à 100% en utilisant setVolume()?Comment faire pour basculer le volume au maximum par programmation sur Android?

Ceci est mon 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

Cela semble terriblement désagréable. Je peux voir pourquoi l'API pourrait vous limiter à 50% du volume. –

+0

Dans tous les cas: http://sagistech.blogspot.com/2010/07/setting-android-volume-programmatically.html, et le doublon lié dans votre question, ci-dessus. Fondamentalement, vous voulez utiliser la classe AudioManager, pas la classe MediaPlayer. –

+0

@RobertHarvey - Si cette limite de 50% est effectivement vraie, je suppose que c'est à cause de la protection auditive. C'est ce qui se passe lors du réglage du volume en stock Android - il vous permet d'aller à 50%, puis vous demande si vous êtes sûr que vous voulez aller plus haut car cela peut endommager votre audition. ** Edit: ** [de la documentation] (http://developer.android.com/reference/android/media/MediaPlayer.html): 'Cette API est recommandée pour équilibrer la sortie des flux audio dans une application. - donc si le volume du système est à 50%, 'MediaPlayer.setVolume()' ne dépassera pas le volume. – kamituel

Répondre

58

Vous pouvez utiliser l'extrait suivant, en utilisant AudioManager:

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

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

Ceci définit le volume au niveau maximum (getStreamMaxVolume()) pour la STREAM_MUSIC (qui est par exemple une chanson jouée). Pour d'autres types de sons, utilisez une valeur différente, comme STREAM_RING etc.

+0

J'ai essayé d'utiliser AudioManager avant mais pour une raison quelconque, eclipse n'aime pas getSystemService (String) -> il est souligné en rouge et me demande de créer une méthode avec ce nom. J'ai importé AudioManager mais je ne sais pas comment résoudre ce problème autrement. Des idées? – Sarah

+6

@Sarah - c'est 'Context.getSystemService()' en fait. Vous devez donc avoir un objet 'Context' (comme une' Activity' ou 'Service' par exemple) De quelle classe l'appelez-vous? – kamituel

+1

Comment régler le volume au milieu? –

Questions connexes