我是android开发的新手,我想创建一个按钮来启动节奏拍子(如节拍器)并在再次单击时停止(一个按钮用于启动和停止)。
当我单击该按钮时,它会在一秒钟的延迟中依次播放5个声音,然后重复播放这5个声音,直到再次按下该按钮为止。
我的问题是,直到播放完所有5种声音为止,整个系统都处于“锁定”状态(不能增大或减小音量,只有在5种声音结束后才可以使用停止按钮)。
所以我想创建一个线程来运行5种声音,当我再次按下按钮时,我希望该线程立即停止。我尝试没有成功,所以任何帮助都会很棒。
这是onClick方法:
public boolean tempoOn = false; // global
public void clickHandlerStartTempo(View view) {
if (!tempoOn) {
Toast toast = Toast.makeText(getApplicationContext(), "Start Tempo!", Toast.LENGTH_SHORT);
toast.show();
tempoOn = true;
final Handler handler = new Handler();
final int delay = 1000; //milliseconds
handler.postDelayed(new Runnable(){
public void run(){
if (tempoOn) {
playSound(0);
SystemClock.sleep(1000);
playSound(1);
SystemClock.sleep(1000);
playSound(1);
SystemClock.sleep(1000);
playSound(1);
SystemClock.sleep(1000);
playSound(1);
handler.postDelayed(this, delay);
}
}
}, delay);
} else {
Toast toast = Toast.makeText(getApplicationContext(), "Stop Tempo!", Toast.LENGTH_SHORT);
toast.show();
tempoOn = false;
}
}
playSound方法(我正在使用SoundPool):
public void playSound(int fileNumber) {
sounds.play(soundIds.get(fileNumber), 1f, 1f, 1, 0, 1);
}
非常感谢。
答案 0 :(得分:0)
您需要将媒体播放器作为服务运行以在后台运行。尝试查看https://developer.android.com/guide/topics/media/mediaplayer#java“在服务中使用MediaPlayer”