这是我的第一篇文章,希望你能帮助我:)。
我正在开发一个Android应用程序,但我无法理解为什么我的代码不起作用。 此应用程序识别语音执行某些命令。
public void OnButtonClick(View v)
{
t.speak("Say the comand", TextToSpeech.QUEUE_FLUSH, null);
startVoiceRecognitionActivity();//This is another function (Speech input)
}
但我听不到TextToSpeech。
但如果我尝试这个代码就可以了:
public void OnButtonClick(View v)
{
t.speak(x, TextToSpeech.QUEUE_FLUSH, null);
while (t.isSpeaking()); //It wait the end of the speech
startVoiceRecognitionActivity();//This is another function (Speech input)
}
没关系,但是如果我在语音输入后尝试这段代码,它什么都不说:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
{
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
b.setText(matches.get(0));
Act(matches.get(0)); //Call the function to do a comand
}
super.onActivityResult(requestCode, resultCode, data);
}
public void Act(String cmd){
if(cmd.equalsIgnoreCase("time") || cmd.equalsIgnoreCase("what time is it")){
t.speak(x, TextToSpeech.QUEUE_FLUSH, null); //don't speach!
while (t.isSpeaking());
}
}
我需要创建一个单独的线程,还是有更好的解决方案?
感谢所有人:)
P.S。对不起我的英文
答案 0 :(得分:0)
尝试在Act(String cmd)
方法中添加一个日志命令,以查看TTS识别的内容(可能是Android无法识别命令):
public void Act(String cmd){
Log.d("MyTTSApp", cmd);
if(cmd.equalsIgnoreCase("time") || cmd.equalsIgnoreCase("what time is it")){
t.speak(x, TextToSpeech.QUEUE_FLUSH, null); //don't speach!
while (t.isSpeaking());
}
}
答案 1 :(得分:0)
这与TextToSpeech在Android中的工作方式有关。
致电时
t.speak("Say the comand", TextToSpeech.QUEUE_FLUSH, null);
你说的是“现在开始说这个”。但是在下一行,你调用一个函数(我从名字中猜测)打开一个新的Activity,在它甚至有机会开始说话之前为你的第一个做背景。
有几种方法可以解决这个问题:你当前的修复并不是最糟糕的想法。或者,也许更整洁,而不是传递null作为最后一个要说的参数,传递一个实现onUtteranceCompletedListener
的对象。当该对象的方法onUtteranceCompleted
被调用时,然后调用startVoiceRecognitionActivity
。