在android中,如何使用tts创建一个在用户和应用程序之间进行通信的应用程序?

时间:2017-08-27 04:30:09

标签: android speech-recognition text-to-speech speech-to-text

我正在努力创建一个类似于" 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()方法可以工作。

谢谢。

1 个答案:

答案 0 :(得分:0)

TTS是异步的。 IT在另一个应用程序中调用活动。完成后,它调用onActivityResult。需要从中调用任何需要结果的代码。