2010-04-22 216 views
1

我有這個問題,我有一些音頻我想播放...音頻停止播放按鈕(Android)

我有兩個按鈕,'播放'和'停止'...

問題是,按下停止按鈕後,然後按下播放按鈕,什麼也沒有發生。 -The停止按鈕停止歌曲,但我想要的播放按鈕再次播放歌曲(從一開始)這裏是我的代碼:

final MediaPlayer mp = MediaPlayer.create(this, R.raw.megadeth); 

,然後將兩個公共onclicks:

(用於播放...)

button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
      button.setText("Playing!"); 
      try { 
    mp.prepare(); 
    } catch (IllegalStateException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
      mp.start(); 
      // 
      } 
     }); 

而停止軌道...

final Button button2 = (Button) findViewById(R.id.cancel); 
    button2.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

     mp.stop(); 
     mp.reset(); 

     } 
    }); 

任何人都可以看到的問題機智這個?如果是的話請您修復它......(對於建議)

非常感謝......

詹姆斯

+0

*播放按鈕做工精細,負一時間各地 *停止按鈕做工精細,(在停止音頻) 仍再次啓動音頻的問題=/- 播放按鈕:( – 2010-04-22 17:40:44

回答

1

您需要start()之前調用prepare()preparAsync()

查看API for details(查看狀態圖)。

+0

看看我把... 'mp.prepare'然後一些ifs ...然後'mp.start'那麼爲什麼它不工作? – 2010-04-22 18:17:41

+0

@ James Rattray:將讀取'mp.reset()'的行更改爲您的button2代碼中的'mp.​​prepare()'。Reset需要重新設置數據源並再次調用prepare - 這是從錯誤中恢復的結果 – JRL 2010-04-22 18:34:41

+0

So no mp。重置所有?只是mp.stop然後mp.prepare()? - 無效...這不起作用=/ – 2010-04-22 21:13:14

0

這是我在我的程序中工作。它每次釋放媒體播放器,因爲每次調用時都會使用不同的聲音,但它應該作爲您使用的解決方法。

創作:

public MediaPlayer mp=null; 

開始:

if (mp!=null){ 
      mp.reset(); 
      mp.release(); 
    } 
      mp = MediaPlayer.create(test.this, soundResource); 
      mp.start(); 

停止:

 mp.stop(); 

另外請注意,您不需要使用做準備,因爲創建方法已要求您準備(API REF)。

1

還有就是Android文檔中的錯誤,在this頁這是說,你可以stop()「原始資源」媒體播放器,然後就再次調用start()之前調用reset()prepare()重播。正如你所注意到的,這不起作用。

問題是reset()會清除音頻源並返回到初始狀態,因此您必須重新設置數據源。不幸的是,您不能設置「原始資源」數據源,因爲除了create()之外,沒有此API。

我不知道解決這個問題的乾淨方式。 stealthcopter的工作方式很好,但是對於你的設計來說很痛苦,因爲你需要爲每個start()調用(需要上下文):(並且涉及銷燬和創建一個複雜的對象,這對於遊戲等實時應用程序是一個價格...

,以確保這方面將只需要爲創建()調用,就是這種方式阻止媒體播放器的另一種方式:

stop() 
prepare() 

但如果你現在叫start()方法,它不會重新開始。您可以撥打seekTo(0),但聲音會有一點來自以前的播放位置的噪音。

我一直在調查。必須有停止,並在原始資源創建時重新啓動媒體播放器的清潔和高效的方式...

+0

重置後MediaPlayer返回到「空閒」狀態。 我查看了你給出的頁面,但沒有看到它。 你可以看看狀態圖上的這個頁面,並看到reset()得到你的位置:) http://developer.android.com/reference/android/media/MediaPlayer.html#State%20Diagram – talel 2013-04-19 15:17:29