我偶然发现了这个随机问题...... 这是我的代码
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(mContext);
initializeRecognitionListener();
mSpeechRecognizer.setRecognitionListener(mRecognitionListener);
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_LANGUAGE, "en-US");
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, Long.valueOf(3000L));
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
mSpeechRecognizer.startListening(intent);
方法initializeRecognitionListener():
private void initializeRecognitionListener() {
mRecognitionListener = new RecognitionListener() {
@Override
public void onReadyForSpeech(Bundle params) {
Log.d("onReadyForSpeech()", "onReadyForSpeech!");
isRecognizing = true;
}
@Override
public void onBeginningOfSpeech() {
Log.d("onBeginningOfSpeech()", "onBeginningOfSpeech!");
}
@Override
public void onEndOfSpeech() {
Log.e("onEndOfSpeech()", "onEndOfSpeech! stop SCO");
}
...
}
主题是“onReadyForSpeech()”和“onBeginningOfSpeech()”方法有时在mSpeechRecognizer.startListening(意图)之后没有调用。此外,“onEndOfSpeech()”也不能被调用。
我正在使用Nexus 4和Android 4.2.2
答案 0 :(得分:2)
我在另一篇文章中发布了一个非常相似的答案:
这是Google语音搜索/ Jelly Bean错误outstanding on the AOSP bug tracker for nearly a year。
我也发布了Google Product Forum about it here,但没有回复。如果您正在阅读本文并希望解决这些问题,请在AOSP问题上加注星标,并在产品论坛帖子上发表评论,以便注意到它!
要解决此问题,您需要实施such as the one demonstrated here。
在我今天的测试中,似乎最新版本的Google搜索已经在内部解决了这个问题 - 所以在Play商店更新Google搜索,这个问题可能会消失 - 如果情况不是这样,请发表评论下面,因为它可能只在某些版本的Google搜索apk中修复,在这种情况下,知道这些变化发生在我们的代码中优雅地处理它们会很有帮助!
答案 1 :(得分:1)
似乎我已经解决了我的问题。要修复的主要想法是保留 SpeechRecognizer对象的单个实例,而不是每次都重新创建。在这些更改后,我没有得到任何“识别器忙”错误。但是当我使用我的应用程序时,我的HTC One S仍然会冻结。我不明白为什么......