2016-08-02 81 views
0

我有一些代碼可以啓動文本到語音,並在按下按鈕時開始播放聲音。除了一個細節外,一切工作都很好。當連續按兩個按鈕時,聲音開始重疊。每次按下按鈕時是否有辦法切斷媒體播放器?我已經使用了noise1.pause(),noise1.stop()和noise1.reset(),但沒有任何效果。我正在考慮使用mediaplayer完整的監聽器,但我不知道如何實現這一點。任何幫助,將不勝感激。非常感謝!!!如何讓音樂停止點擊下一個按鈕

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的警告,這應該工作。