1

我有一个相当奇怪的问题。我有一个 android 应用程序,我正在使用SpeechRecognizer该类添加语音识别。我创建了实现 RecognitionListener 的类,它只为每个事件打印一条日志消息。一切似乎都很好。onReadyForSpeech 被解雇, onBeginningOfSpeech 被解雇, onEndOfSpeech 被解雇。

一个重要的事件并没有被触发,onResults:p

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

我将意图设置如下

    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);
4

2 回答 2

0

我确实遇到了问题陈述中所述的问题。我有两个可用的语音识别服务(谷歌和另外一个)。我在内部类中出错了:

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

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

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

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

于 2014-08-04T19:50:00.457 回答
-1

是否onResults被调用取决于提供语音识别服务的应用程序。您的问题描述不完整,因为您没有提及您用于语音识别的应用程序。是谷歌语音搜索吗?在任何情况下,您的问题都是错误报告,而不是 Stackoverflow,应该将其连同有关应用程序版本、您的 Android 版本、硬件等的详细信息一起发送给应用程序的生产者。

请注意,还有一个 2 参数版本createSpeechRecognizer,您可以使用它来确保获得所需的语音识别器。

另外,看看使用相同SpeechRecognizer接口并附带源代码的应用程序 Babble:

(很抱歉宣传我自己的应用程序,但在这种情况下可能会有所帮助,即您可以检查它是否按预期工作或是否有相同的问题。)

于 2012-11-16T17:50:30.137 回答