Android中的短,变化间隔计时器

时间:2011-02-06 20:54:31

标签: android timer

我正在尝试为Android创建一种节拍器。它会以一定的间隔发出一些可听见的哔哔声,给人一种节奏感。因此,时机非常关键。基本上它应该做以下

(开始) 播放蜂鸣声类型1(约0.1秒长)

等待x毫秒(介于500和1000之间)

播放蜂鸣声类型2(约0.1秒长)

等待y毫秒(介于500和1000之间)

播放哔声类型3(约0.1秒长)

等待y毫秒(介于500和1000之间)

回去开始

UI活动将有一些按钮来调整等待间隔。

通过阅读所有各种博客,教程和讨论,似乎我应该使用postdelayed()Runnable并将延迟设置为我所需的等待时间x或y。之后,我应该开始播放声音。这应该允许我不考虑wav声音文件的长度。

我是否大致走上正轨?我意识到时机不会很完美,因为有其他服务运行可能会延迟我的计时器的执行。为了改善这一点,我很乐意在飞行模式下使用手机或转向其他一些服务,因为在使用此应用程序时我不需要任何其他服务。

那里有这些代码的完整示例吗?对于Android,我是初学者。我对直接C嵌入式系统的经验更多。将所有类及其功能放在一起是非常艰巨的。

任何帮助表示赞赏, 迈克尔

2 个答案:

答案 0 :(得分:1)

关于哔哔声之间的等待,我想到的一个想法就是启动一个单独的Java线程,你在其中输入一个无限循环并调用Thread.sleep(interval)之类的

public MyLooper extends Runnable{
   private boolean shouldRun = true;
   private int interval = 1; //ms

   @Override
   public void run(){
      while(shouldRun){
         //play the beep

         Thread.sleep(interval);
      }

   }


   public void stop(){
      this.shouldRun = false;
   }

   public void setInterval(int interval){
      this.interval = interval;
   }
}

当您通常在onResume事件中启动活动(根据您的需要)时,您将创建Java线程。在按钮内部,您可以通过调用setInterval(...)方法来调整间隔。

可能是一个可能的解决方案......

答案 1 :(得分:1)

这就是你需要的: Updating the UI from a Timer

编辑:该教程专门针对UI更新方案,但它简单描述了您真正想要的内容:TimerTask

class UpdateTimeTask extends TimerTask {
   public void run() {
       long millis = System.currentTimeMillis() - startTime;
       int seconds = (int) (millis / 1000);
       int minutes = seconds / 60;
       seconds     = seconds % 60;

       timeLabel.setText(String.format("%d:%02d", minutes, seconds));
   }
}

if(startTime == 0L) {
   startTime = evt.getWhen();
   timer = new Timer();
   timer.schedule(new UpdateTimeTask(), 100, 200);
}