如何在android中等待按钮点击一段时间

如何在android中等待按钮点击一段时间,android,multithreading,algorithm,button,text-to-speech,Android,Multithreading,Algorithm,Button,Text To Speech,我正在开发一个盲人应用程序 我有4个屏幕大小的按钮(重叠)。程序的每个步骤都有一个按钮可点击,每个按钮都有多个作业 我的程序以语音(Android TTS引擎)开始。比如“请触摸屏做x”。在这一步之后,我想等待3秒钟按钮点击,如果按钮没有点击,发声“请触摸屏做y”,并再次等待3秒钟作业y。(x和y是第一个按钮的作业) 按钮应根据触摸屏进行其中一项操作。但我怎么能等3秒钟按钮点击,然后继续发声下一个选项,然后再等3秒钟呢 如果单击第一个按钮,它将消失。按钮2将可单击-TTS引擎将开始发声第二个按钮

我正在开发一个盲人应用程序

我有4个屏幕大小的按钮(重叠)。程序的每个步骤都有一个按钮可点击,每个按钮都有多个作业

我的程序以语音(Android TTS引擎)开始。比如“请触摸屏做x”。在这一步之后,我想等待3秒钟按钮点击,如果按钮没有点击,发声“请触摸屏做y”,并再次等待3秒钟作业y。(x和y是第一个按钮的作业)

按钮应根据触摸屏进行其中一项操作。但我怎么能等3秒钟按钮点击,然后继续发声下一个选项,然后再等3秒钟呢


如果单击第一个按钮,它将消失。按钮2将可单击-TTS引擎将开始发声第二个按钮选项。应用程序将像这样工作,但我被困在等待按钮点击部分。

您可以通过繁忙的等待解决您的问题。 因此,在您第一次发声“请触摸屏…”之后,您将启动一个后台线程,等待特定的时间,如下所示:

new Thread(new Runnable() {
        public void run() {
            Thread.sleep(3000);
            runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //vocalize
                    }
                });
        }
    }).start();
正如您所看到的,从线程内部,3秒钟后将启动一个新的runnable,它将再次在UI线程上运行。这是因为我想我记得你应该只从UI线程发出声音(取决于你播放文件/声音的方法)

然而,这只是一个想法,我无法测试运行我的代码! 但我希望我启发了你

问候
Me

我建议您改用android.os.Handler。在您的情况下,您可以这样做:

public void onCreate() {
  this.handler = new Handler()
  playTheVoiceOfThingX()
  viewToTap.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick(View v) {
      doThingX();
    }
  });
  handler.postDelayed(new PrepareThingYTask(), 3000);
}
class PrepareThingYTask() implements Runnable {
   viewToTap.setOnClickListener(new OnClickListener(){
     @Override
     public void onClick() {
        doThingY();
     }
   });
   handler.postDelayed(new PrepareThingZTask(), 3000);
}

class PrepareThingZTask() implements Runnable {
   ....
}
一个很好的提醒,处理程序执行的runnable可以在UIThread中执行,因此不需要对其进行繁重的工作,或者创建一个不同的循环器来运行它

问候

做一个练习。单击取消它。