2014-01-12 107 views
-1

我試圖爲我的背景音樂打開和關閉按鈕。音樂馬上開始。當我按下關閉按鈕時音樂關閉,但是當我按下按鈕時關閉音樂。請幫助如何爲Android編程開/關按鈕?

mp=MediaPlayer.create(this, R.raw.islandsong); 
    mp.setLooping(true); 
    mp.start(); 

    onButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (mp==null){ 
       mp.start(); 
      } 
     } 
    }); 

    offButton.setOnClickListener(new View.OnClickListener() {   
     public void onClick(View v) { 
      if (mp!=null){ 
       mp.stop(); 
       mp.release(); 
       mp = null; 
      }    
     } 
    }); 
+2

'if(mp == null){ mp.start(); 「這並不是你想要的。 – SLaks

+0

發佈堆棧跟蹤。你可以使用一個toogle按鈕 – Raghunandan

+2

不要通過stackoverflow進行調試。強制關閉意味着你應該檢查你的logcat以查看它是否崩潰。如果在研究之後堆棧跟蹤讓你感到困惑,請在這裏發帖。 – keyser

回答

2

您正在使用錯誤的方法。您應該檢查音樂播放器是否正在播放,如果是這樣,請停止播放。

try { 
    if(mp.isPlaying()){ 
     mp.stop(); 
     mp.release(); 
    } 
} catch(Exception ex) { 
    ex.printStackTrace() 
} 

更新 你需要編輯你的代碼如下,如果你想播放和停止媒體播放器

onButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (!mp.isPlaying()){ 
       mp.start(); 
      } 
     } 
    }); 

    offButton.setOnClickListener(new View.OnClickListener() {   
     public void onClick(View v) { 
      try { 
       if(mp.isPlaying()){ 
       mp.stop(); 
       mp.release(); 
       } 
       } catch(Exception ex) { 
       ex.printStackTrace() 
       }    
     } 

此代碼將確保Media Player播放歌曲,只有當它是不只有在播放時才播放和停止。

+1

Rohan Kandwal是對的。如果你這樣做:** mp = null **,那麼mp將不再被訪問,除非你不重新創建它(一旦設置爲null,它將永遠丟失)。 +1提供正確的答案。 –