如何从mp.setLooping(true)
获得重复的值。我可以使用OnCompletionListener
来获得重复次数,但它在循环之间产生1秒的延迟,这在面向音乐的应用程序中很烦人。 OnCompletionListener
循环不顺畅{。}}。
有什么建议吗?提前谢谢。
循环之间有1秒延迟或间隙的代码:
mp.setLooping(true)
答案 0 :(得分:3)
试试这个:
MediaPlayer mp1;
double play_times = 10;
int sound_length;
Handler handler;
boolean sound_playing = false;
int times_played = 0;
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.home);
handler = new Handler();
mp1 = MediaPlayer.create(this, R.raw.soundfile);
sound_length = mp1.getDuration();
mpplay();
}
private void mpplay() {
times_played = 0;
mp1.setLooping(true);
mp1.start();
sound_playing = true;
handler.postDelayed(loop_stopper, (int)(sound_length*(play_times-.5)));
handler.postDelayed(counter, sound_length);
}
private Runnable loop_stopper = new Runnable() {
public void run() {
sound_playing = false;
mp1.setLooping(false);
}
};
private Runnable counter = new Runnable() {
public void run() {
if (sound_playing) {
times_played++;
handler.postDelayed(counter, sound_length);
}
}
};
handler.postDelayed(loop_stopper,(int)(sound_length *(play_times-.5)));
此行将在最后一个所需循环中途停止循环。因为这只是意味着它不会继续循环,所以声音文件仍会在最后一次重复播放时完全播放。