我正在努力创建一个类似于" Siri",IOS的应用程序。
所以我使用了tts,stt示例代码。
private ArrayList<String> result = null;
...
private void speakOut(String text) {
tts.speak(text, TextToSpeech.QUEUE_ADD, null, null);
}
private void promptSpeechInput() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.speech_prompt));
try {
startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
} catch (ActivityNotFoundException a) {
Toast.makeText(getApplicationContext(),
getString(R.string.speech_not_supported),
Toast.LENGTH_SHORT).show();
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE_SPEECH_INPUT: {
if (resultCode == RESULT_OK && null != data) {
result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
}
break;
}
}
}
非常好用。 当它独自开始时,它也很有效。 但问题是如果我让代码与app进行通信,比如
public void onClick(View v){
speakOut("How can I help you?");
promptSpeechInput();
String voiceInputData = result.get(0);
if (voiceInputData.equals("hello")){
Log.d("debug", "hello spoken.");
}
else{
Log.d("debug", "nothing.");
}
}
结果:&#34;没有。&#34;
效果不好。所以我调试了。然后我发现代码没有按顺序工作。如果我调用promptSpeechInput(),那么当我说一些东西时,主代码已经在下一行工作(例如if语句)。所以我不能像我想的那样制作代码。
因此。任何人都知道如何解决这个问题? 我的意思是,我想制作一个方法
promptSpeechInput()---&gt;每当我打电话给这个方法,在我说完之后,字符串就在&#34;结果&#34;变量
并且代码必须一步一步地工作以便onClick()方法可以工作。
谢谢。
答案 0 :(得分:0)
TTS是异步的。 IT在另一个应用程序中调用活动。完成后,它调用onActivityResult。需要从中调用任何需要结果的代码。