Android MediaPlayer - 未完成播放声音两次

时间:2016-01-24 15:34:59

标签: android android-mediaplayer android-audiomanager

我在我的Android应用中添加了点击声音,但当我点击按钮太快时,声音只播放一次(因为第一次播放尚未完成)。 我希望每次点击都能播放声音

我想知道实现我想要的行为的最佳方法是什么?

我将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();
     }
});
  • 我试着在play()之前停止()/ prepare()但是我得到同样的东西。
  • 我尝试在每次播放时设置一个新的MediaPlayer,它可以工作,但我想不推荐(顺便说一下,使用这种方法,如果我非常快地将按钮垃圾过多次,我的活动中的声音会停止)

提前谢谢你:)

3 个答案:

答案 0 :(得分:2)

尝试:

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

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

答案 1 :(得分:1)

如果声音已经播放,您可以从头开始播放声音。

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

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

答案 2 :(得分:0)

我找到了一个解决方法,我减少了我的clic声音的长度(从0.50s到0.17s),所以它完成了更早的播放;然后我发起它的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的欲望效果,请告诉它,我会将其作为正确答案。 :) 谢谢。

相关问题