嘿所有,所以CountDownTimer有一个相当小但烦人的问题。目前我的间隔设置为1000.我试图检测我的
剩余的毫秒数onTick()
方法。因此,当剩下20秒,剩下10秒等时,我可以使用文本转语音。等等,如果我使用:
//Speak when 20 seconds left
if (millisUntilFinished == 20000) {
tts.speak("You have 20 seconds left.", TextToSpeech.QUEUE_FLUSH, null);
}
计时器无法准确检测到20000毫秒。
所以我不得不求助于:
//Speak when 20 seconds left
if (millisUntilFinished < 20999) {
if (millisUntilFinished > 19999) {
tts.speak("You have 20 seconds left.", TextToSpeech.QUEUE_FLUSH, null);
}
}
问题在于,有时文本到语音将在该间隔期间出现两次。有没有办法完全检测毫秒,所以我不必使用大于或小于?
答案 0 :(得分:3)
有没有办法完全检测毫秒,所以我不必使用大于或小于?
当然不是。 Android不是RTOS。时间将是近似的,仅仅是因为主应用程序线程可能在任何给定时刻被其他职责占用。
答案 1 :(得分:2)
如果您想要更多灵活性,还可以尝试类似
的内容int secondsLeft = 0;
new CountDownTimer(30000, 100) {
public void onTick(long ms) {
if (Math.round((float)ms / 1000.0f) != secondsLeft)
{
secondsLeft = Math.floor((float)ms / 1000.0f);
if (secondsLeft == 20) {
tts.speak("You have 20 seconds left.", TextToSpeech.QUEUE_FLUSH, null);
}
}
}
public void onFinish() {
}
}.start();
答案 2 :(得分:0)
你可以用一招。如果你使用Chronometer小部件而不是TextView,你可以做出类似的东西:
int time = 30;
Chronometer chrono = (Chronometer) findViewById(R.id.your_chronometer_id);
chrono.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
chronometer.setText(String.valueOf(_time));
if(_time == 20) tts.speak("You have 20 seconds left.", TextToSpeech.QUEUE_FLUSH, null);
if(_time == 0){
//Time finished, make your stuff
chronometer.stop();
}else{
_time--;
}
}
});