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

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

+0

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

我发现了一个解决办法,我减少了我集团公司的声音(从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(); 
    } 
}); 
+0

尝试过它,它做同样的事情:/ – Maarti

+0

[看到这个答案](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(); 
     } 
    } 
}); 

不完全是你想要的,但在大多数情况下给人满意的结果。