语音识别器监听器ERROR_NETWORK

时间:2015-01-18 12:16:07

标签: java android speech-recognition audio-recording

我的语音识别监听器有问题,因为主题建议。 我开始收听后会出现此错误。问题是这样的:Link

回答这个问题:

  

根据使用SpeechRecognizer生成ERROR_NETWORK(值2),该错误是由Samsungs语音API(由Vlingo提供)引起的。将手机设置中的语音API更改为标准Google API可以解决问题。

我可以补充一点,我使用三星Galaxy S4(显然Vlingo识别器未经检查)

好的......我的代码:

SpeechRecognizerService.java

@Override
public void cancel() {
    mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, false);
    mSpeechRecognizer.cancel();
    listener.setListening(false);
}

@Override
public void listen() {
    mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);
    if (!listener.isListening()) {
        mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
        listener.setListening(true);
    }
}

@Override
public void repeat() {
    mSpeechRecognizer.cancel();
    mSpeechRecognizer.startListening(mSpeechRecognizerIntent);
    listener.setListening(true);
}

SpeechRecognizerIntent

public Intent getSpeechIntent() {
    Intent mSpeechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "pl");
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, Config.getContext().getPackageName());
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_WEB_SEARCH_ONLY, true);
    mSpeechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 100);
    return mSpeechRecognizerIntent;
}

SpeechRecognizerListener

@Override
public void onBeginningOfSpeech() {
    Log.i(TAG, "on begining");
}

@Override
public void onBufferReceived(byte[] buffer) {

}

@Override
public void onEndOfSpeech() {
    Log.i(TAG, "on end");
}

@Override
public void onError(int error) {    
    Log.i(TAG, error + "");
    service.repeat();
}

@Override
public void onEvent(int eventType, Bundle params) {

}

@Override
public void onPartialResults(Bundle partialResults) {
}

@Override 
public void onReadyForSpeech(Bundle params) {
    Log.i(TAG, "on ready for speech");
}

@Override
public void onResults(Bundle results) {
    Log.i(TAG, "on results");
    service.manageResults(results);
    service.cancel();
}

@Override
public void onRmsChanged(float rmsdB) {

}

LogCat正常工作时

01-18 12:56:08.827: I/SPEECH LISTENER(602): on ready for speech
01-18 12:56:09.538: I/SPEECH LISTENER(602): on begining
01-18 12:56:10.969: I/SPEECH LISTENER(602): on end
01-18 12:56:11.670: I/SPEECH LISTENER(602): on results
01-18 12:56:11.740: I/SPEECH LISTENER(602): on end

这里工作正常,但为什么"结束"触发两次?

触发错误时的LogCat

01-18 13:00:42.694: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:42.694: I/SPEECH LISTENER(3202): 2
01-18 13:00:42.704: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:42.704: I/SPEECH LISTENER(3202): 2
01-18 13:00:43.185: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:43.415: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:43.415: I/SPEECH LISTENER(3202): 2
01-18 13:00:43.425: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:43.425: I/SPEECH LISTENER(3202): 2
01-18 13:00:43.625: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:43.975: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:43.975: I/SPEECH LISTENER(3202): 2
01-18 13:00:43.985: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:43.985: I/SPEECH LISTENER(3202): 2
01-18 13:00:44.176: I/SPEECH LISTENER(3202): on ready for speech
01-18 13:00:46.548: I/SPEECH LISTENER(3202): on begining
01-18 13:00:47.979: I/SPEECH LISTENER(3202): on end
01-18 13:00:49.060: I/SPEECH LISTENER(3202): on results
01-18 13:00:49.190: I/SPEECH LISTENER(3202): on end

2表示触发错误(2 - ERROR_NETWORK)

Android Manifest.xml - 权限

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />

我还尝试使用我的SpeechRecognizer作为singleton,就像stackoverflow建议的人一样,但它什么都没改变

我还可以补充一点,因为我的语言(波兰语)还不支持我无法使用离线识别。

0 个答案:

没有答案