2011-07-10 14 views
1

私のアプリケーションに40以上のサウンドファイルがあります。私の活動の1つでは、Bundle b(ID範囲:1〜50)に付属のidonly one sound fileのベースを置きたいと思います。 ()のonCreateでAndroid MediaPlayerサウンドの問題

:私はこれを試してみました

Bundle b = getIntent().getExtras(); 
    id = (int) b.getInt("id"); 
    tv.setText("id : "+id); // Just to make sure that I received a correct id 
    setResourseId(id); 
    mPlayer.start(); 

setResourceId():

public void setResourseId(int id) { 
    switch(id) { 
    case 1:  mPlayer = MediaPlayer.create(this, R.raw.sound1); 
    case 2:  mPlayer = MediaPlayer.create(this, R.raw.sound2); 
    case 3:  mPlayer = MediaPlayer.create(this, R.raw.sound3); 
    case 4:  mPlayer = MediaPlayer.create(this, R.raw.sound4); 
    case 5:  mPlayer = MediaPlayer.create(this, R.raw.sound5); 
           . 
           . 
           . 
           . 
           . 
    default: mPlayer = MediaPlayer.create(this, R.raw.sound0); 
    } 
} 

しかし、それは常にsound0 file(デフォルト1)を再生します!

そのためのあらゆるソリューション - それはTextView tv常には正しいID

を出力するので、奇妙なよう?

答えて

2

switchを使用すると、それぞれのケースを壊す必要があります。そうでない場合は、次の行も実行されます。すべての行が毎回実行され、mPlayerへの最後の割り当ては毎回MediaPlayer.create(this, R.raw.sound2);でした。短い修正は - 各ケースの後にブレークを追加します。

switch(id) { 
    case 1: 
     mPlayer = MediaPlayer.create(this, R.raw.sound1); 
     break; 
    case 2: 
     mPlayer = MediaPlayer.create(this, R.raw.sound2); 
     break; 
    .... 
} 

を注意点として - 私はIDの配列を使用して、この長いスイッチケースを回避することを検討します。

+0

MediaPlayerオブジェクトを最初に返していたので、追加するのを忘れました。ありがとう。 – iTurki

+0

あなたは大歓迎です。 :) – MByD