2013-02-01 182 views
1

我做了一個android應用程序,你可以點擊按鈕來播放聲音。每次單擊按鈕時,都會創建一個新的MediaPlayer,問題是,當您在另一個聲音仍在播放期間按下按鈕時,它們同時播放,但是我想,以前的聲音在您停止時會停止按下按鈕。我已經試過這段代碼,但每次按下按鈕時我的應用程序崩潰:停止MediaPlayer

MediaPlayer mp; 
Button button; 

button = (Button) findViewById(R.id.button); 

button.setOnClickListener(new OnClickListener() { 


     @Override 
     public void onClick(View v) { 

      if(mp.isPlaying()){ 

       mp.stop(); 

      } 

      mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); 
      mp.start(); 

     }}); 

有沒有辦法解決我的問題?

+0

後從當你的應用程序崩潰的堆棧跟蹤。 – FoamyGuy

回答

2

它可能會因爲'mp'未初始化而崩潰。試試這個:

@Override 
    public void onClick(View v) { 
     //if mp exists and is playing... 
     if(mp != null && mp.isPlaying()){ 

      mp.stop(); 

     } 

     mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); 
     mp.start(); 

    }}); 

編輯你也可以避開初始化「MP」你把它聲明在上面檢查空。

例如,而不是檢查mp!= null。更改您從 'MP' 的聲明:

MediaPlayer mp; 

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); 

和你的onclick方法可能看起來像:

public void onClick(View v) { 

    if(mp.isPlaying()) { 
     mp.stop(); 
    } 

    //start mp from beginning 

} 
+0

已經嘗試了你的代碼,但是出現了同樣的錯誤:但是第二件事我並沒有真正得到 –

+1

你建議的代碼是最好的方法。而不是在不需要時初始化它。 (在這種情況下)。 @LennartSchoch你將很高興發佈logcat。否則它只是猜測的工作。加上我很確定你打算調用'.release()' – Doomsknight

0

好像開始了太多的MediaPlayer不好,因爲當我點擊聲音幾次,應用程序崩潰。我已經將mp.start更改爲mp.reset併發布。

+0

提出另一個問題,答案部分是答案。 –

0

  • 你必須創建之前釋放玩家一個新的
  • 我不會賭IsPlaying模塊()檢查停止播放;因爲你不需要它釋放它!

代碼

@Override 
    public void onClick(View v) { 

     if(mp != null) { 
      mp.release(); 
     } 
     mp = MediaPlayer.create(getApplicationContext(), R.raw.sound); 
     mp.start(); 

    }});