2016-01-24 217 views
2

我添加了點擊聲音到我的Android應用程序,但當我點擊按鈕太快,聲音只播放一次(因爲第一次播放尚未完成)。 我想要在每次點擊時播放聲音Android MediaPlayer播放聲音兩次,但沒有完成

我想知道實現我想要的行爲的最佳方式是什麼?

我把MediaPlayer的實例在onCreate()方法和播放之前在onclick播放()

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    [...] 
    mpClic = MediaPlayer.create(getApplicationContext(),R.raw.clic); 
} 


vButtonLeft.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     [...]    
     mpClic.start(); 
    } 
}); 
  • 我試圖阻止()/準備()是()但我得到同樣的東西。
  • 我試圖在每次播放時實例化一個新的MediaPlayer,但它可以工作,但我想不推薦(並且順便說一下,使用此方法,如果我非常快速地將該按鈕多次發送垃圾按鈕,我的活動中的聲音將停止)

預先感謝您:)

+0

檢查'mpClic.start();'第二次之前是否有'mpClic.isPlaying()'。 [文檔](http://developer.android.com/reference/android/media/MediaPlayer.html) –

+0

好的,但如果它已經播放,我怎麼能第二次播放? – Maarti

回答

0

我發現了一個解決辦法,我減少了我集團公司的聲音(從0.50s到0.17s)的lenght所以它完成先打;然後我啓動它的2個實例。如果我需要播放聲音並且第一個實例已經播放,我會播放第二個。

private MediaPlayer mpClic1; 
private MediaPlayer mpClic2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    [...] 
    mpClic1 = MediaPlayer.create(getApplicationContext(),R.raw.clic); 
    mpClic2 = MediaPlayer.create(getApplicationContext(),R.raw.clic); 
} 

vButtonRight.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      [...] 
      if(mpClic1.isPlaying()) 
       mpClic2.start(); 
      else 
       mpClic1.start(); 
     } 
    }); 

這是一個解決方法,所以如果有人知道如何實現重放一個已經打的MediaPlayer的願望效果,請告訴它,我就會把它作爲正確答案。 :) 謝謝。

2

嘗試:

vButtonLeft.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

    if(mpClic.isPlaying()){ 
     mpClic.stop(); 
     mpClic.prepare(); 
    } 
     mpClic.start(); 
    } 
}); 
+0

嘗試過它,它做同樣的事情:/ – Maarti

+0

[看到這個答案](http://stackoverflow.com/a/14939313/5216567) –

1

如果已經播放,您可以從頭開始播放聲音。

vButtonLeft.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     if (mpClic.isPlaying()) 
     { 
      mpClic.seekTo(0); 
     } 
     else 
     { 
      mpClic.start(); 
     } 
    } 
}); 

不完全是你想要的,但在大多數情況下給人滿意的結果。