谷歌语音识别器并不是从Android 4.x开始的

时间:2013-07-11 11:35:23

标签: android speech-recognition

我偶然发现了这个随机问题...... 这是我的代码

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

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仍然会冻结。我不明白为什么......