我正在开发一个总是从用户那里收听语音的Android应用程序。它在Sony X10i上运行时有效,但在三星Galaxy SII中不起作用。 这是我的代码:
SpeechRecognizer speechRecognizer;
speechRecognizer = SpeechRecognizer.createSpeechRecognizer(getBaseContext());
MyRecognitionListener speechListner=new MyRecognitionListener();
speechRecognizer.setRecognitionListener(speechListner);
speechRecognizer.startListening(RecognizerIntent.getVoiceDetailsIntent(getApplicationContext()));
这是我的听众课程:
class MyRecognitionListener implements RecognitionListener {
public void onBeginningOfSpeech() {
Log.d("leapkh", "onBeginningOfSpeech");
}
public void onBufferReceived(byte[] buffer) {
Log.d("leapkh", "onBufferReceived");
}
public void onEndOfSpeech() {
Log.d("leapkh", "onEndOfSpeech");
}
public void onError(int error) {
Log.d("leapkh", "onError");
}
public void onEvent(int eventType, Bundle params) {
Log.d("leapkh", "onEvent");
}
public void onPartialResults(Bundle partialResults) {
Log.d("leapkh", "onPartialResults");
}
public void onReadyForSpeech(Bundle params) {
Log.d("leapkh", "onReadyForSpeech");
}
public void onResults(Bundle results) {
Log.d("leapkh", "onResults");
}
public void onRmsChanged(float rmsdB) {
Log.d("leapkh", "onRmsChanged");
}
}
在这种情况下,如何解决这个问题?
答案 0 :(得分:7)
我找到了解决方案。
将speechRecognizer.startListening()
方法的参数更改为intent
,如下所示:
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, getApplication().getPackageName());
speechRecognizer.startListening(intent);
答案 1 :(得分:0)
使用意图更改您传递的参数
{
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en");
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
this.getPackageName());
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
if (speech != null) {
speech = null;
}
SpeechRecognizer speech SpeechRecognizer.createSpeechRecognizer(this);
speech.setRecognitionListener(this);
speech.startListening(intent);
}
同时检查您获得的错误类型 对于nomatch,网络和服务器错误再次调用startListening
public void startListening() {
try {
if (SpeechRecognizer.isRecognitionAvailable(this)) {
if (speech != null) {
speech.startListening(intent);
} else {
SimpleMethod();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}