2016-08-02 7 views
0

ボタンを押したときに、音声からテキストを開始するコードがあります。 1つの詳細を除いてすべてが正常に動作しています。 2つのボタンを連続して押すと、音が重なり始める。ボタンを押すたびにメディアプレーヤーを切断する方法はありますか?私はnoise1.pause()、noise1.stop()、noise1.reset()を使用していますが、何も動作しません。私はメディアプレイヤーの完全なリスナーを使用することを考えていましたが、私はこれをどのように実装できるかはわかりません。どんな助けもありがとう。どうもありがとう!!!次のボタンをクリックして音楽を停止する方法

public void onClick(View view) { 

    Resources res = getResources(); 
    final TextView tv = (TextView) findViewById(R.id.color_text); 

    final MediaPlayer noise1 = MediaPlayer.create(this, R.raw.one); 
    final MediaPlayer noise2 = MediaPlayer.create(this, R.raw.two); 
    final MediaPlayer noise3 = MediaPlayer.create(this, R.raw.three); 

    switch (view.getId()) { 
     case R.id.one_button: 

      String oneString = res.getString(R.string.One); 
      tv.setText(oneString); 
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { 
       tts.speak(oneString, TextToSpeech.QUEUE_FLUSH, null); 
      } else { 
       tts.speak(oneString, TextToSpeech.QUEUE_FLUSH, null, null); 
      } 

      noise1.start(); 

      break; 

     case R.id.two_button: 

      String twoString = res.getString(R.string.Two); 
      tv.setText(twoString); 
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { 
       tts.speak(twoString, TextToSpeech.QUEUE_FLUSH, null); 
      } else { 
       tts.speak(twoString, TextToSpeech.QUEUE_FLUSH, null, null); 
      } 

      noise2.start(); 

      break; 

     case R.id.three_button: 

      String threeString = res.getString(R.string.Three); 
      tv.setText(threeString); 
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { 
       tts.speak(threeString, TextToSpeech.QUEUE_FLUSH, null); 
      } else { 
       tts.speak(threeString, TextToSpeech.QUEUE_FLUSH, null, null); 
      } 

      three.start(); 

      break; 

} 
+0

"_but nothing works_"なぜですか? –

答えて

0

は定義しonClick(...)方法外MediaPlayerインスタンスを初期化し、stop()方法が動作するはずです。ここで

は、私が何を意味するかです:

MediaPlayer noise1, noise2, noise3; 
TextView tv; 

public void onCreate(....){ 
    ..... 
    tv = (TextView) findViewById(R.id.color_text); 

    noise1 = MediaPlayer.create(this, R.raw.one); 
    noise2 = MediaPlayer.create(this, R.raw.two); 
    noise3 = MediaPlayer.create(this, R.raw.three); 
    .... 
} 

public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.one_button: 
      ... 
      noise1.start(); 
      noise2.stop(); 
      noise3.stop(); 
     break; 

     case R.id.two_button: 
      ... 
      noise1.stop(); 
      noise2.start(); 
      noise3.stop(); 
     break; 

    case R.id.three_button: 
      ... 
      noise1.stop(); 
      noise2.stop(); 
      noise3.start(); 
     break; 
} 

あなたが作成したばかりのないものを作成し、前に始めましたMediaPlayerインスタンスを停止しようとしているので、それが今では動作しません。ボタンを押す。

0

私はコメントに評判がないので、これを代わりに使用してください。

作成されたMediaPlayerオブジェクトはこのメソッドの範囲内にあります。つまり、onClickが返されるとすぐに、オブジェクトは参照を持たず、したがって停止できません。

解決策は、包含オブジェクト内の参照を持つか、MediaPlayerをコレクションに格納することで、オブジェクトをスコープ内で上位に移動することです。次に、onClickメソッドの開始時に、古いものを停止してから新しいものを作成し、参照を上書きします。

Androidで警告が表示されていない限り、これはうまくいくはずです。

関連する問題