2013-02-18 50 views
1

我嘗試了大部分的選項avialable在stackoverflow,請你幫我! 我有一個播放MediaPlayer實例的按鈕,當點擊時,但如果我點擊雙擊或在播放媒體期間點擊它會播放兩次,即使我設置button.setEnable(false)和button.setClickable(false),下面的問題在Main.java的代碼,我在XML的Android設置:的onClick = 「playMedia」MediaPlayer繼續播放甚至按鈕被禁用

MediaPlayer playMedia; 
private void playGeneric(MediaPlayer mp, int name, Button button) { 
    button.setEnabled(false); 
    button.setClickable(false); 
    mp = MediaPlayer.create(this, name); 
    mp.start(); 
    while (mp.isPlaying()) { 
    } 
    mp.stop(); 
    mp.release(); 
    mp = null; 
    button.setEnabled(false); 
    button.setClickable(false); 

} 

// play the Media 
public void playMedia(View button) { 
    playGeneric(Media, R.raw.Media, (Button) findViewById(R.id.button1)); 
} 

非常感謝

回答

0

1-你應該有每一個(最好staticMediaPlayer比如你活動/服務

2-此循環while (mp.isPlaying())是極其糟糕的實踐蒂斯,你只需要聽話可以適當的事件

3-創造你必須檢查,如果當前不爲空,然後停止並釋放

爲了解決你的代碼可以在新的MediaPlayer實例之前做到以下幾點:

1 - 讓你的類實現OnCompletionListener和覆蓋的方法onCompletion(MediaPlayer mp)通知時MediaPlayer成品和清潔資源(但你需要清理,以及當你的活動/服務被摧毀)

2-

static MediaPlayer playMedia; 

private void playGeneric(MediaPlayer mp, int name, Button button) { 
    button.setEnabled(false); 
    button.setClickable(false); 
    if(mp !=null){ 
     mp.stop(); 
     mp.release(); 
    } 
    mp = MediaPlayer.create(this, name); 
    mp.start(); 

} 

@Override 
public void onCompletion(MediaPlayer mp) { 
    mp.release(); 
    playMedia = null; 
    button.setEnabled(true); 
    button.setClickable(true); 
} 
+0

問題是我有6個按鈕,每個按鈕都有它自己的媒體播放時,我可以如何使onCompletion方法更通用。 – serouja 2013-02-18 06:09:37

+0

您會收到一個'MediaPlayer'實例,因此您可以爲它們註冊相同的偵聽器;但請注意,您應該**不**在您的應用程序中安裝多個MediaPlayer – iTech 2013-02-18 07:23:55