Android 播放音乐一次倒计时
我只想在几秒钟内播放一次声音文件,但如果我将倒计时间隔设置为100到700,则会执行两到三次操作(由于四舍五入)。如果我将倒计时间隔设置为700到1000,我将得到10到2范围内的一个操作,但是如果我将播放声音文件设置为1秒,我将得到两个播放,因为单击将轮数设置为1。 是的,我知道。 谢谢你的帮助Android 播放音乐一次倒计时,android,countdowntimer,Android,Countdowntimer,我只想在几秒钟内播放一次声音文件,但如果我将倒计时间隔设置为100到700,则会执行两到三次操作(由于四舍五入)。如果我将倒计时间隔设置为700到1000,我将得到10到2范围内的一个操作,但是如果我将播放声音文件设置为1秒,我将得到两个播放,因为单击将轮数设置为1。 是的,我知道。 谢谢你的帮助 public void startTimer() { tCountDownTimer = new CountDownTimer(tTime * 1000, 1000) {
public void startTimer() {
tCountDownTimer = new CountDownTimer(tTime * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
int seconds = (int) (millisUntilFinished / 1000);
int minutes = seconds / 60;
int hours = minutes / 60;
minutes = minutes % 60;
seconds = seconds % 60;
String curTime = hours + ":" + minutes + "::" + seconds;
Log.v("log_tag", "Log is here Time is now" + curTime);
tTimeLabel.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
runSec (seconds);
runMin (minutes);
runHou (hours);
if (seconds == 3) {
playAlertSound(R.raw.beep1);
}
else if(seconds == 2){
playAlertSound(R.raw.beep1);
}
else if(seconds == 1){
playAlertSound(R.raw.beep1);
}
else if(seconds == 0){
playAlertSound(R.raw.beep2);
}
如果我使用int seconds=Math.round(毫秒直到完成/1000)代码>
如果我使用int seconds=Math.round(毫秒直到完成/1000f)代码>
这是用户在驯服器上设置的时间:
protected int tTime = 0;
public void onClick(View v) {
if(v == upTimesl && tTime <= (11*60*60+1*59*60+55))
settTime(tTime + 5);
else if(v == downTimesl && tTime > 5)
settTime(tTime - 5);
else if(v == downTimesl && tTime <= 5)
settTime(tTime=0);
...
protectedintttime=0;
公共void onClick(视图v){
如果(v==正常运行时间和时间5)
设置时间(tTime-5);
否则,如果(v==downTimesl&&tTime从数学上讲,您没有取整,则您正在进行地板操作。如果millisuntilfeigned/1000
实际上是0.9999,则您保证得到0。您应该使用Math.round()
:
(请注意,我正在除以1000f
,将long除以整数仍然是一个floor操作。)
您当前的间隔是100毫秒,这没有意义,因为您所有的计算都是以秒为基础的。您应该使用:
tCountDownTimer = new CountDownTimer(tTime * 1000, 1000) {
此外,倒计时还有一些怪癖:它会在每个间隔上增加几毫秒,并且在调用onFinish()
之前通常会跳过最后一个间隔。我在返回时对这个类做了一些更改,以消除中的这些错误。我同意您关于舍入和延迟的看法(测试不同的方法)但是如果我使用'int seconds=Math.round(millisuntiltfinished/1000f);'计时器会停止两秒钟。下面是日志文件:'12-06 18:58:10.191:V/log_标记(649):log在这里时间现在是0:0::5 12-06 18:58:11.239:V/log_标记(649):log在这里时间现在是0:0::4 12-06 18:58:12.278:V/log_标记(649):Log is here Time is now 0:0::3 12-06 18:58:13.318:V/Log_tag(649):Log is here Time is now 0:0::2'将您的LogCat添加到您的问题中(单击左下角的“编辑”),以便我可以看到更多的LogCat。好的,tTime
设置为什么?我看到倒计时显示“5,4,3,2”并跳过“1”.这是我修正的错误之一。1000f
的时间是正确的,因为您从5开始倒数。
protected int tTime = 0;
public void onClick(View v) {
if(v == upTimesl && tTime <= (11*60*60+1*59*60+55))
settTime(tTime + 5);
else if(v == downTimesl && tTime > 5)
settTime(tTime - 5);
else if(v == downTimesl && tTime <= 5)
settTime(tTime=0);
...
int seconds = Math.round(millisUntilFinished / 1000f);
tCountDownTimer = new CountDownTimer(tTime * 1000, 1000) {