SpeechRecognizer 什么都不做......我错过了什么
SpeechRecognizer does nothing...what am I missing
请看下面的代码。 onBeginningOfSpeech() 被调用(甚至在我开始说话之前,顺便说一句),但随后 - 没有。我错过了什么?
我承认代码大部分是由不同的例子组成的,我没有完全理解。但我希望它至少能做点什么,这样我就可以继续试验。感谢任何帮助。
public class SpeechRecogActivity extends Activity {
private SpeechRecognizer recog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("TTS_SpeechRecog", "Starting...");
recog = SpeechRecognizer.createSpeechRecognizer(this);
recog.setRecognitionListener(new RecogListener());
Intent intent = RecognizerIntent.getVoiceDetailsIntent(getApplicationContext());
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "cmn-Hans-CN");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "cmn-Hans-CN");
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, "cmn-Hans-CN");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy");
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
recog.startListening(intent);
}
private static class RecogListener implements RecognitionListener {
@Override
public void onBeginningOfSpeech() {
Log.e("TTS_SpeechRecog", "onBeginningOfSpeech...");
}
@Override
public void onRmsChanged(float rmsdB) {
Log.e("TTS_SpeechRecog", "onRmsChanged...");
}
@Override
public void onEndOfSpeech() {
Log.e("TTS_SpeechRecog", "onEndOfSpeech...");
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.e("TTS_SpeechRecog", "onReadyForSpeech...");
}
@Override
public void onResults(Bundle data) {
Log.e("TTS_SpeechRecog", "onResults...");
ArrayList strlist = data.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < strlist.size();i++ ) {
Log.d("Speech", "result=" + strlist.get(i));
}
}
@Override
public void onPartialResults(Bundle partialResults) {
Log.e("TTS_SpeechRecog", "onPartialResults...");
}
@Override
public void onEvent(int eventType, Bundle params) {
Log.e("TTS_SpeechRecog", "onEvent...");
}
@Override
public void onBufferReceived(byte[] buffer) {
Log.e("TTS_SpeechRecog", "onBufferReceived...");
}
@Override
public void onError(int error) {
Log.e("TTS_SpeechRecog", "onBeginningOfSpeech...");
}
}
}
您必须在单击任何按钮或小部件后启动 SpeechRecognizer。
我建议您使用下面的 github 存储库。
https://github.com/gotev/android-speech
还要确保您已在清单中添加权限,例如:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
可能是你忘记添加权限了。
android.permission.RECORD_AUDIO
在 API 23 之前你可以添加:
<code><uses-permission android:name="android.permission.RECORD_AUDIO" />
在API 23之后使用运行时权限。
请看下面的代码。 onBeginningOfSpeech() 被调用(甚至在我开始说话之前,顺便说一句),但随后 - 没有。我错过了什么?
我承认代码大部分是由不同的例子组成的,我没有完全理解。但我希望它至少能做点什么,这样我就可以继续试验。感谢任何帮助。
public class SpeechRecogActivity extends Activity {
private SpeechRecognizer recog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("TTS_SpeechRecog", "Starting...");
recog = SpeechRecognizer.createSpeechRecognizer(this);
recog.setRecognitionListener(new RecogListener());
Intent intent = RecognizerIntent.getVoiceDetailsIntent(getApplicationContext());
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "cmn-Hans-CN");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "cmn-Hans-CN");
intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, "cmn-Hans-CN");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy");
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
recog.startListening(intent);
}
private static class RecogListener implements RecognitionListener {
@Override
public void onBeginningOfSpeech() {
Log.e("TTS_SpeechRecog", "onBeginningOfSpeech...");
}
@Override
public void onRmsChanged(float rmsdB) {
Log.e("TTS_SpeechRecog", "onRmsChanged...");
}
@Override
public void onEndOfSpeech() {
Log.e("TTS_SpeechRecog", "onEndOfSpeech...");
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.e("TTS_SpeechRecog", "onReadyForSpeech...");
}
@Override
public void onResults(Bundle data) {
Log.e("TTS_SpeechRecog", "onResults...");
ArrayList strlist = data.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < strlist.size();i++ ) {
Log.d("Speech", "result=" + strlist.get(i));
}
}
@Override
public void onPartialResults(Bundle partialResults) {
Log.e("TTS_SpeechRecog", "onPartialResults...");
}
@Override
public void onEvent(int eventType, Bundle params) {
Log.e("TTS_SpeechRecog", "onEvent...");
}
@Override
public void onBufferReceived(byte[] buffer) {
Log.e("TTS_SpeechRecog", "onBufferReceived...");
}
@Override
public void onError(int error) {
Log.e("TTS_SpeechRecog", "onBeginningOfSpeech...");
}
}
}
您必须在单击任何按钮或小部件后启动 SpeechRecognizer。
我建议您使用下面的 github 存储库。
https://github.com/gotev/android-speech
还要确保您已在清单中添加权限,例如:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
可能是你忘记添加权限了。
android.permission.RECORD_AUDIO
在 API 23 之前你可以添加:
<code><uses-permission android:name="android.permission.RECORD_AUDIO" />
在API 23之后使用运行时权限。