首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在倒计时结束前播放声音

在倒计时结束前播放声音
EN

Stack Overflow用户
提问于 2012-02-17 03:52:48
回答 2查看 2.8K关注 0票数 1

嗨,这里是一个code...the的想法是,它运行20秒,然后在5秒前0,它播放一个声音,然后在倒计时播放next...but,它只是播放结束,并跳过5秒标记…我已经尝试玩它,但不能让它工作。

有什么想法吗?

代码语言:javascript
复制
//Counter 2
final CountDownTimer counter2 = new CountDownTimer(20000 , 1000) {
public void onTick(long millisUntilFinished) {
  mCounter2TextField.setText(" " + formatTime(millisUntilFinished));

  long timeLeft = millisUntilFinished / 1000;

  if (timeLeft == 5000) 
         playAlertSound(R.drawable.sound1);

}

public void onFinish() {
  start();
  playSound();
}

public void playSound() {
MediaPlayer mp = MediaPlayer.create(getBaseContext(), (R.drawable.sound2));
mp.start();

}   


};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-17 03:57:09

因为你的:

代码语言:javascript
复制
playSound(...);

和你的计时器在同一个“线程”里。你应该做一些像这样的事情:

代码语言:javascript
复制
if (timeLeft == 5000) 

  new Runnable(){
      void Run(){
           playAlertSound(R.drawable.sound1);
      }
      public void playSound() {
            MediaPlayer mp = MediaPlayer.create(getBaseContext(), (R.drawable.sound2));
            mp.start();
       }

  }.run();

或者类似的东西:D

因为你不能在降低计时器的同时播放声音!:)

票数 4
EN

Stack Overflow用户

发布于 2012-02-17 03:56:39

您在timeLeft中将millisUntilFinished转换为秒,然后告诉它只在还剩5000秒(而不是毫秒)时才播放。

在进行修改以修复此问题时,还应将比较结果更改为timeLeft <= 5,以便在还剩4999毫秒的情况下调用onTick时开始播放。当然,如果声音已经开始播放,您需要添加逻辑来不播放该声音。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9318103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档