Android MediaPlayer播放声音两次,但没有完成
我添加了点击声音到我的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.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的愿望效果,请告诉它,我就会把它作为正确答案。 :) 谢谢。
尝试:
vButtonLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mpClic.isPlaying()){
mpClic.stop();
mpClic.prepare();
}
mpClic.start();
}
});
尝试过它,它做同样的事情:/ – Maarti
[看到这个答案](http://*.com/a/14939313/5216567) –
如果已经播放,您可以从头开始播放声音。
vButtonLeft.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (mpClic.isPlaying())
{
mpClic.seekTo(0);
}
else
{
mpClic.start();
}
}
});
不完全是你想要的,但在大多数情况下给人满意的结果。
检查'mpClic.start();'第二次之前是否有'mpClic.isPlaying()'。 [文档](http://developer.android.com/reference/android/media/MediaPlayer.html) –
好的,但如果它已经播放,我怎么能第二次播放? – Maarti