在android中播放相同的声音,无需等待前一个声音结束
伙计们的场景是,假设我点击一个按钮,声音播放,在这首歌的持续时间内,我再次点击按钮,想从头开始播放。我尝试了以下代码,但没有成功。 代码是:在android中播放相同的声音,无需等待前一个声音结束,android,audio,Android,Audio,伙计们的场景是,假设我点击一个按钮,声音播放,在这首歌的持续时间内,我再次点击按钮,想从头开始播放。我尝试了以下代码,但没有成功。 代码是: public class SoundtestActivity extends Activity { /** Called when the activity is first created. */ MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) {
public class SoundtestActivity extends Activity {
/** Called when the activity is first created. */
MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mp = MediaPlayer.create(this, R.raw.gun_shot);
Button click=(Button) findViewById(R.id.bt1);
click.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mp.isPlaying())
mp.reset();
mp.start();
}
}));
}
}您只需
注释
以下几行,并在按钮的侦听器方法中移动您的媒体播放器实例
,就可以让多个媒体播放器并行播放
Button click=(Button) findViewById(R.id.bt1);
click.setOnClickListener((new View.OnClickListener() {
@Override
public void onClick(View v) {
mp = MediaPlayer.create(this, R.raw.gun_shot); // ADD THIS LINE HERE
if(mp.isPlaying()){
mp.stop(); //ADDED TO STOP FIRST
mp.release(); //ADDED TO RELEASE RESOURCES
}
mp.start();
}
}));
试试这个代码
mp.setOnCompletionListener(新的OnCompletionListener(){
或者用mp.reset()替换mp.start();在这段代码中,最好的方法和最简单的方法是= mp.setLooping(真);
是的,它确实有效,只需在mp.start()之后添加这一行,不需要其他任何提示。在sir之前尝试过这一点,但在多次触碰之后,它停止播放:/u能否提供媒体播放器停止播放时生成的日志,请尝试使用媒体播放器。create();在onCreate()中调用一次,请提供日志这是日志:06-18 10:18:21.082:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.092:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.282:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.294:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.462:E/MediaPlayer(848):错误(-19,0)
06-18 10:18:21.462:E/MediaPlayer(848):错误(-19,0)06-18 10:18:38.636:D/dalvikvm(848):格雷夫增加到20106-18 10:18:38.662:E/MediaPlayer(848):错误(-19,0)06-18 10:18:38.672:E/MediaPlayer(848):错误(-19,0)06-18 10:18:38.872:E/MediaPlayer(848):错误(-19,0)媒体播放器实例有一些可允许的限制,这就是您出现错误的原因,而且文档中说,当使用媒体播放器时,您应该调用release(),以释放资源。如果不发布,过多的MediaPlayer实例将导致异常。请查看该片段的编辑版本,我意识到您只是想从一开始就再次播放相同的声音,而不是相同声音的多个实例。
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
mp.start();
}
});