java - SpeechRecognizer onResults 未触发

标签 java android artificial-intelligence speech-recognition

我有一个相当奇怪的问题。我有一个 Android 应用程序,我使用 SpeechRecognizer 类为其添加语音识别。我创建了实现 RecognitionListener 的类,它只打印每个事件的日志消息。一切看起来都很好。 onReadyForSpeech 被触发,onBeginningOfSpeech 被触发,onEndOfSpeech 被触发。

但是,一个重要的事件不会被触发,onResults :p

所以在夏天,一切看起来都很好,没有抛出异常,并且我收到事件告诉我它已成功启动并停止监听。我是否遗漏了一些额外的 Intent ,告诉 SpeechRecognizer 它需要将结果发送到 onResults 或类似的东西?

我设置 Intent 如下

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName());
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);

SpeechRecognizer 的完成方式为

    SpeechRecognizer speech = SpeechRecognizer.createSpeechRecognizer(this);
    speech.setRecognitionListener(this);

我开始听

speech.startListening(intent);

最佳答案

我遇到的问题与问题陈述中所述完全一致。我有两种可用的语音识别服务(Google 和另外一种)。我在内部类中出错了:

private final Handler handler = new Handler();
private final Runnable stopListeningRunnable = new Runnable() {
                @Override
                public void run() {
                    speechRecognizer.stopListening(); 
                }
            };

我没有将其写在使用它的方法中,而是将其放在内部类的开头。

这会停止对 onResults 的调用。一旦我将其内联到实际使用它的方法中,onResults 就可以正常工作。

希望这对你有帮助..:)

关于java - SpeechRecognizer onResults 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13417675/

相关文章:

ruby-on-rails - 模型- View - Controller 是否与人工智能和行为树很好地配合?

java - 辅助方法: Doubling Chars in a String but stops recursion after first char

android - 我正在 Linux 中编写 eMMC 驱动程序并从 JNI 应用程序访问 IOCTL。失败,错误代码 13(权限被拒绝)

java - 无法从外部证书创建 SSLContext

android - 错误 : Unresolved reference: DaggerAppComponent

android - Android Google Billing SDK 中未显示介绍价格(印度)

text - 显示相关内容或文章的技巧

tree - 如何在复杂游戏中的 MCTS 中执行 Roll-out

java - 捕获并存储所有 mysql 数据库数据(表行)以使用它们进行比较和匹配

java - 如何读取 key=value 文件以及如何拆分以逗号分隔的字符串?