Android 为什么它在开始听之前不睡3秒钟?

Android 为什么它在开始听之前不睡3秒钟?,android,speech-recognition,text-to-speech,Android,Speech Recognition,Text To Speech,我正在努力做到: 执行TextToSpeech SpeechRecognitor在用户重复语音时开始监听 TextToSpeech’d单词/短语 但我的问题是,例如,如果我要通过TextToSpeech说“示例”,当SpeechRecognitor开始听时,它也会从前面的“示例”中提取“示例”,并添加到用户所说的示例中。所以最后,我以“榜样”结尾,这是我不想要的 代码: public void onItemClick(AdapterView父视图、视图、int位置、, 长id){ //TODO自

我正在努力做到:

  • 执行
    TextToSpeech
  • SpeechRecognitor在用户重复语音时开始监听 TextToSpeech’d单词/短语
  • 但我的问题是,例如,如果我要通过TextToSpeech说“示例”,当SpeechRecognitor开始听时,它也会从前面的“示例”中提取“示例”,并添加到用户所说的示例中。所以最后,我以“榜样”结尾,这是我不想要的

    代码:

    public void onItemClick(AdapterView父视图、视图、int位置、,
    长id){
    //TODO自动生成的方法存根
    item=(字符串)parent.getItemAtPosition(位置);
    tts.speak(item,TextToSpeech.QUEUE\u FLUSH,null);
    线程线程=新线程(){
    公开募捐{
    试一试{
    睡眠(3000);
    }捕捉(中断异常e){
    e、 printStackTrace();
    }
    }
    };
    thread.start();
    高级监听器(srIntent);
    }
    
    它必须在
    run()正文中

    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // TODO Auto-generated method stub
        item = (String) parent.getItemAtPosition(position); 
        tts.speak(item, TextToSpeech.QUEUE_FLUSH, null);
        Thread thread = new Thread() {
            public void run() {
                try {
                    sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
               sr.startListening(srIntent);
            }
        };
        thread.start();
    
    }
    
    public void onItemClick(AdapterView父视图、视图、int位置、,
    长id){
    //TODO自动生成的方法存根
    item=(字符串)parent.getItemAtPosition(位置);
    tts.speak(item,TextToSpeech.QUEUE\u FLUSH,null);
    线程线程=新线程(){
    公开募捐{
    试一试{
    睡眠(3000);
    }捕捉(中断异常e){
    e、 printStackTrace();
    }
    高级监听器(srIntent);
    }
    };
    thread.start();
    }
    
    您正在两个线程中执行两个进程。您正在创建线程1并使其休眠3秒,然后
    sr.startListening(srIntent)在单独的UI线程中启动意图。所以它马上就开始了。在一个线程中使用这两个进程,就像我在下面发布的一样

    public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    // TODO Auto-generated method stub
    item = (String) parent.getItemAtPosition(position); 
    tts.speak(item, TextToSpeech.QUEUE_FLUSH, null);
    Thread thread = new Thread() {
        public void run() {
            try {
                sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        mSpeech.sendEmptyMessage(0);
        }
    };
    thread.start();
    

    因为您的睡眠在另一个threadput outside sleep with Thread objecti中,所以我尝试了这种方法,并在等待3秒钟后自动崩溃。它说:SpeechRecognizer应该仅从应用程序的主线程使用thread@rx24race试试我的解决方案,你必须使用处理程序才能开始语音识别是的!这个解决方案奏效了。但是你介意给我解释一下Handler的用法吗?我从来没有见过这个学期,因为我只是个初学者。非常感谢!谢谢你的时间和帮助!无需使用处理程序,只需使用
    rununuithread(runnable)
    -\ux-无需使用
    线程
    。只需使用
    处理程序。sendEmptyMessageDelayed
    public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    // TODO Auto-generated method stub
    item = (String) parent.getItemAtPosition(position); 
    tts.speak(item, TextToSpeech.QUEUE_FLUSH, null);
    Thread thread = new Thread() {
        public void run() {
            try {
                sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        mSpeech.sendEmptyMessage(0);
        }
    };
    thread.start();
    
    private Handler mSpeech=new Handler(){
        public void handleMessage(android.os.Message msg) {
             sr.startListening(srIntent);
        }
    };