タイトルが示すように、Android Marshmallow フォンで Google アプリを更新した後、話し終わってから音声認識が停止するまでに最大 7 秒かかりました。古いバージョンの Google アプリを搭載した Lollipop デバイスでアプリを実行すると、発話タイムアウトの終了に 2 秒しかかかりません。
これが私のコードです:
SpeechRecognizer speechrecognizer;
String TAG="joshtag";
class listener implements RecognitionListener
{
public void onReadyForSpeech(Bundle params)
{
loge("onReadyForSpeech");
}
public void onBeginningOfSpeech()
{
loge("onBeginningOfSpeech");
}
public void onRmsChanged(float rmsdB)
{
loge("onRmsChanged");
}
public void onBufferReceived(byte[] buffer)
{
loge("onBufferReceived");
}
public void onEndOfSpeech()
{
loge("onEndofSpeech");
}
public void onError(int error)
{
loge("error " + error);
stopMicrophoneGlow();
}
public void onResults(Bundle results)
{
stopMicrophoneGlow();
String str = new String();
loge("ASR2 onResults " + results);
ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
loge("result " + data.get(0));
sendTextInputFromUser(data.get(0).toString()) ;
}
public void onPartialResults(Bundle partialResults)
{
loge("onPartialResults");
}
public void onEvent(int eventType, Bundle params)
{
loge("onEvent " + eventType);
}
}
speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
speechIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 2000); speechIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, 1500); speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE,"en");
speechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,this.getPackageName());
speechrecognizer = SpeechRecognizer.createSpeechRecognizer(this);
speechrecognizer.setRecognitionListener(new listener());
上記のコードでは、"new Listener()" を使用して音声認識を呼び出しています。これにより、Google Speak ポップアップなしで音声認識を行うことができますが、Intent で 2000 ミリ秒しか指定していないにもかかわらず、Speech タイムアウトの終了が長すぎます。約 7 秒です。
回避策: 代わりに、次のように、[話す] ポップアップを使用して音声認識を呼び出す場合:
this.startActivityForResult(speechIntent, SPEECHRECON_CODE);
その後、発話タイムアウトの終了は非常に短く (約 2 秒)、すべて問題ありません。
最新の Google アプリの更新で音声認識の「バグ」を回避して、ポップアップなしで音声認識を行うにはどうすればよいですか?? 何か案は?