15

此函数启动语音识别,但超时太快,就像从 IME 键盘(例如 Google 键盘)启动语音识别一样,它不会很快超时。我需要一种方法来启动与谷歌键盘相同的意图。

public void StartSpeechRecognitionActivity(){
    try{
        Intent intent = new   Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName());
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
        intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, 3000);
        intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 3000);
        main.startActivityForResult(intent, SPEECHRECOGNITION_RESULTCODE);
    } catch (ActivityNotFoundException error) {
        ShowAndSpeakMessage("Speech recognition is not supported by your device");
    } catch( RuntimeException error ) {
        Log.e( TAG, ERROR_PREFIX + Errors.toString(error) );
    } catch( Error error ) {
        Log.e( TAG, ERROR_PREFIX + Errors.toString(error) );
        throw error;
    }
}
4

3 回答 3

3
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
                            "Voice recognition!");
startActivityForResult(intent, REQUEST_CODE);

这对我来说很好用!

于 2013-07-15T11:40:12.573 回答
0

然后我认为您需要检查 onError 功能。我正在通过以下方式执行此操作。它对我来说很好。

 public void onError(int error) {
    String errorMessage = getErrorText(error);
    Log.d(LOG_TAG+">"+ "FAILED " + errorMessage);
  if(errorMessage.contains("RecognitionService busy"))
  {  speech.stopListening();
    speech.startListening(recognizerIntent);


  }else if(errorMessage.contains("No speech input")){
      speech.stopListening();
        speech.startListening(recognizerIntent);

    }else if(errorMessage.contains("No match")){
      speech.stopListening();

      speech.startListening(recognizerIntent);
    }

}

因此您可以根据错误的类型进行尽可能多的检查,或者您的情况可能存在错误

我希望它会帮助你

于 2015-03-19T08:39:23.123 回答
0

试图找到一个组合来使它工作startActivityForResult是不可能的,所以我创建了一个演示项目SpeechRecognizer。它工作正常,您可以根据自己的喜好进一步定制。哔哔声已得到处理,您在讲话时暂停,语音识别器不会停止

语音识别演示

在此处输入图像描述

于 2021-12-18T03:02:03.370 回答