长时间讲话后,Android ACTION_RECOGNIZE_SPEECH意向永远不会完成

Efe*_*dak 5 android speech-recognition

我开始意图然后等待结果。它在简短的演讲中效果很好,但是如果演讲时间太长,它并不能给我答案。(近1分钟)

final Intent searchIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

    searchIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "tr");
    searchIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, true);
    searchIntent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, true);

    startActivityForResult(searchIntent, VOICE_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

除了SpeechRecognizer之外,还有其他方法可以从ACTION_RECOGNIZE_SPEECH意向中获取结果吗?

sav*_*ion 4

这是一个可行的解决方案:

final Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, yourPackageHere);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1000);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Your Prompt");
startActivityForResult(intent,REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

但在使用此功能之前,您应该检查用户是否授予了RECORD_AUDIO权限以及设备是否ACTION_RECOGNIZE_SPEECH可用。

识别语音对于长语音有一个有趣的行为。如果您提供较小的数字来MAX_RESULTS识别语音,则在长时间语音后屏幕会冻结。onActivityResult因此,您需要保持数字更大,然后通过List<String> results识别语音意图得到结果。您可以通过循环并使用来获得结果。