3

私はこのランダムな問題に遭遇しました...これが私のコードです

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(intent) の後に呼び出されないことがあります。また、「onEndOfSpeech()」も呼び出せません。

Android 4.2.2 で Nexus 4 を使用しています

4

2 に答える 2

2

別の投稿に非常によく似た回答を投稿しました:

これは Google Voice Search/Jelly Bean のバグで、AOSP バグ トラッカーで 1 年近く未解決のままです。

こちらの Google 製品フォーラムにも投稿しましたが、応答がありません。これを読んでいて、これらの問題を解決したい場合は、AOSP の問題にスターを付けて、製品フォーラムの投稿にコメントして、注目を集めてください。

この問題を回避するには、ここに示すような実装が必要です。

今日のテストでは、Google 検索の最新バージョンでこの問題が内部的に修正されているようです - したがって、Play ストアで Google 検索を更新すると、この問題は解消される可能性があります - そうでない場合は、以下にコメントしてください。 Google 検索 apk の特定のバージョンでのみ修正される可能性があります。その場合、コードで適切に処理するために、これらのバリエーションがどこで発生するかを知っておくと役立ちます。

于 2013-09-07T18:04:43.700 に答える
1

問題が解決したようです。修正する主なアイデアは、毎回再作成するのではなく、SpeechRecognizer オブジェクトの単一のインスタンスを保持することです。これらの変更の後、「Recognizer busy」エラーは発生しませんでした。しかし、アプリを使用すると HTC One S がフリーズします。なぜか理解できませんでした…

于 2013-09-19T20:31:13.777 に答える