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
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);
}
};