Android - Как отключить SoundPool в TimerTask, не останавливая его
Я пытаюсь создать звук метронома, но не работает возможность его отключения. Я хотел бы иметь возможность отключить звук без остановки TimerTask, так как я хочу, чтобы скорость была постоянной, как только она включена. Вот мой код:
public class Metronome {
private boolean mute;
private boolean playing = false;
private Timer mainTimer;
private SoundPool mSoundPool;
int mSoundID;
public Metronome(Context context) {
mSoundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
mSoundID = mSoundPool.load(context, R.raw.metronome, 1);
}
public void play(float pace, boolean mute) {
mainTimer = new Timer();
MyTimerTask mainTimerTask = new MyTimerTask();
mainTimer.schedule(mainTimerTask, 0, Math.round(pace * 1000));
this.mute = mute;
playing = true;
}
public void stop() {
mainTimer.cancel();
mainTimer.purge();
playing = false;
}
public boolean isPlaying() {
return playing;
}
public void setMute(boolean mute) {
this.mute = mute;
if (mute) {
mSoundPool.setVolume(mSoundID, 0, 0);
} else {
mSoundPool.setVolume(mSoundID, 1, 1);
}
}
private void playSound() {
if (!mute) {
mSoundPool.play(mSoundID, 1, 1, 1, 0, 1);
}
}
class MyTimerTask extends TimerTask {
@Override
public void run() {
playSound();
}
}
}
Тем не менее, призывая setMute(true)
не работает. Кто-нибудь знает, как я могу отключить звук моего SoundPool?
1 ответ
Догадаться. Это работает, когда я использую статические методы и переменные.
public class Metronome {
public static boolean mute = false;
public static boolean playing = false;
private static Timer mainTimer;
private static SoundPool soundPool;
private static int soundID;
public static void loadSound(Context context) {
soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
soundID = soundPool.load(context, R.raw.metronome, 1);
}
public static void play(float pace, boolean isMuted) {
mainTimer = new Timer();
MyTimerTask mainTimerTask = new MyTimerTask();
mainTimer.schedule(mainTimerTask, 0, Math.round(pace * 1000));
mute = isMuted;
playing = true;
}
public static void stop() {
mainTimer.cancel();
mainTimer.purge();
playing = false;
}
static class MyTimerTask extends TimerTask {
@Override
public void run() {
playSound();
}
private void playSound() {
if (!mute) {
soundPool.play(soundID, 1, 1, 1, 0, 1);
}
}
}
}