我有一个MediaPlayer对象,通过它我可以点击一个按钮播放声音。声音文件只有1-2秒长。当我一个接一个地(快速)点击相应的按钮时,它没有播放声音两次(它只播放一次。我尝试过这样的代码:
public void onClick(View view) {
if(DrawSound.isPlaying()) {
DrawSound.stop();
DrawSound.prepareAsync();
}
DrawSound.start();
}
它不是wokring。搜索了很多,但可以使它工作。任何帮助!!!!
答案 0 :(得分:0)
尝试使用prepare而不是prepareAsync
答案 1 :(得分:0)
这是因为您在完成播放声音后未发布媒体播放器...在媒体播放器release
方法中使用reset
和setOnCompletionListener
方法......
你可以像这样使用它......
if(mp.isPlaying()) {
try {
mp.stop();
mp.reset();
mp.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
mp.start();
}
或者你可以使用它......
mp.stop();
mp.prepareAsync();
mp.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
这对我来说很好。
答案 2 :(得分:0)
嘿伙计们,如果有人可以从中得到帮助:
用技巧解决我的问题(毕竟技巧可以做到所有:p)
我拿了2个MediaPlayer对象和一个MediaPlayer引用并写成这样:
soundPlayer = DrawSound.isPlaying() ? DrawSound1 : DrawSound;
soundPlayer.start();
答案 3 :(得分:-1)
试试这个,看它是否有效:
if(DrawSound.isPlaying()) {
DrawSound.stop();
DrawSound.prepareAsync();
DrawSound.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
DrawSound.start();
}
});
}