Android MediaPlayer - 未完成时播放两次声音
Android MediaPlayer - Play sound twice while not finished
我在我的 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,它可以工作,但我想不推荐这样做(顺便说一句,使用这种方法,如果我向按钮发送垃圾邮件,我的 activity 中的声音就会停止太多次了)
提前谢谢你:)
尝试:
vButtonLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mpClic.isPlaying()){
mpClic.stop();
mpClic.prepare();
}
mpClic.start();
}
});
我找到了一个解决方法,我减少了 clic 声音的长度(从 0.50 秒到 0.17 秒)所以它可以提前播放;然后我启动它的 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.seekTo(0);
}
else
{
mpClic.start();
}
}
});
不完全是你想要的,但在大多数情况下都能得到令人满意的结果。
我在我的 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,它可以工作,但我想不推荐这样做(顺便说一句,使用这种方法,如果我向按钮发送垃圾邮件,我的 activity 中的声音就会停止太多次了)
提前谢谢你:)
尝试:
vButtonLeft.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mpClic.isPlaying()){
mpClic.stop();
mpClic.prepare();
}
mpClic.start();
}
});
我找到了一个解决方法,我减少了 clic 声音的长度(从 0.50 秒到 0.17 秒)所以它可以提前播放;然后我启动它的 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.seekTo(0);
}
else
{
mpClic.start();
}
}
});
不完全是你想要的,但在大多数情况下都能得到令人满意的结果。