2011-05-15 90 views
0

我有一個MediaPlayer對象作爲類屬性。Media Player停止工作

MediaPlayer mp; 

然後我用他們在我的onCreate方法 -

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

然後我嘗試從我的一個按鈕停止clicklistener這樣的 -

 btnBack = (Button) findViewById(R.id.btn1);  
    btnBack.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      stopSound(); 
      startActivity(new Intent(Five.this, Four.class)); 
      finish(); 

     } 
    }); 
} 

public void stopSound(){ 
    if (mp != null) { 
     mp.release(); 
     mp.stop(); 
    } 
} 

但停止不工作。

我在做什麼錯了?

回答

3

您已經發布了MediaPlayer實例。它消失了。釋放它後,您不能調用stop()。如果您打算恢復聲音,只需刪除release()調用即可。如果您想銷燬MediaPlayer(例如,稍後使用MediaPlayer.create()創建新的MediaPlayer),請刪除stop()調用。你應該仔細閱讀this documentation; MediaPlayer類非常複雜。你需要了解不同的狀態,以及何時可以調用某些方法。

0

你不能叫停止

之前釋放看看這裏的生命週期http://developer.android.com/reference/android/media/MediaPlayer.html

+0

好的...我刪除了釋放方法,並呼籲停止。仍然沒有區別:( – nasaa 2011-05-15 22:56:35

+0

是mp null?它應該拋出一個異常,如果您嘗試從無效狀態調用mediaplayer方法。嘗試在那裏嘗試catch(加上使用log.d進行日誌記錄)併發布logcat的結果 – ingo 2011-05-16 01:27:00

+0

no mp 讓我再說一次,當我點擊下一個按鈕時,試圖停止媒體播放器,在那裏我試着檢查mp!= null,然後調用mp.stop(),它不起作用。也嘗試在onDestroy方法中做這個API演示:( 我相信我在做一些愚蠢的事情 – nasaa 2011-05-16 17:57:43

2

在某些版本的Android,只是一些的,我在一個應用程序streamming電臺也有類似的問題,它的工作它與:

try{ 
     if(mp!=null && mp.isPlaying()){ 
      mp.stop(); 
     } 
     mp.release(); 
     mp=null; 
     mp = new MediaPlayer(); //I needed this, maybe you dont hac 
    }catch(Exception e){ 
        e.printStackTrace(); 
     System.out.println("I can't believe you get here !"); 
    } 
+0

任何想法它會影響創造mp obj這裏..假設它是快速的過程開始和停止。 – CoDe 2013-12-30 10:14:54