我使用的服务是:离线语音识别
调用的接口是:speechRecognizer.startListening(intent);
参数设置情况:intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");
开发平台和机型:Android 6.0,小米2S
SDK版本号:2.1.21
代码或日志截图(上传截图能帮助您更快解决问题):
public SpeechControl(Context context) {
speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context, new ComponentName(context, VoiceRecognitionService.class));
speechRecognizer.setRecognitionListener(this);
}
public void startRecognize(OnRecognizeListener listener) {
this.mListener = listener;
Intent intent = new Intent();
intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");
speechRecognizer.startListening(intent);
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.e("TAG", "准备就绪,可以开始说话");
}
@Override
public void onBeginningOfSpeech() {
}
@Override
public void onRmsChanged(float rmsdB) {
}
@Override
public void onBufferReceived(byte[] buffer) {
}
@Override
public void onEndOfSpeech() {
}
@Override
public void onError(int error) {
StringBuilder sb = new StringBuilder();
switch (error) {
case SpeechRecognizer.ERROR_AUDIO:
sb.append("音频问题");
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
sb.append("没有语音输入");
break;
case SpeechRecognizer.ERROR_CLIENT:
sb.append("其它客户端错误");
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
sb.append("权限不足");
break;
case SpeechRecognizer.ERROR_NETWORK:
sb.append("网络问题");
break;
case SpeechRecognizer.ERROR_NO_MATCH:
sb.append("没有匹配的识别结果");
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
sb.append("引擎忙");
break;
case SpeechRecognizer.ERROR_SERVER:
sb.append("服务端错误");
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
sb.append("连接超时");
break;
}
sb.append(":" + error);
Log.e("TAG", "识别失败:" + sb.toString());
}
@Override
public void onResults(Bundle results) {
ArrayList resultList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));
mListener.onResult(resultStr);
}
//识别临时结果
@Override
public void onPartialResults(Bundle partialResults) {
ArrayList resultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));
mListener.onResult(resultStr);
}
@Override
public void onEvent(int eventType, Bundle params) {
}
public interface OnRecognizeListener {
void onResult(String result);
}
复现步骤、现象及其他描述:代码跟给出的demo是一样的,但是启动之后也不提示准备就绪,直接就执行onError返回没有匹配的识别结果。
儒雅的牛大春:
我使用的服务是:离线语音识别
调用的接口是:speechRecognizer.startListening(intent);
参数设置情况:intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");
开发平台和机型:Android 6.0,小米2S
SDK版本号:2.1.21
代码或日志截图(上传截图能帮助您更快解决问题):
public SpeechControl(Context context) {
speechRecognizer = SpeechRecognizer.createSpeechRecognizer(context, new ComponentName(context, VoiceRecognitionService.class));
speechRecognizer.setRecognitionListener(this);
}
public void startRecognize(OnRecognizeListener listener) {
this.mListener = listener;
Intent intent = new Intent();
intent.putExtra("grammar", "asset:///baidu_speech_grammar.bsg");
speechRecognizer.startListening(intent);
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.e("TAG", "准备就绪,可以开始说话");
}
@Override
public void onBeginningOfSpeech() {
}
@Override
public void onRmsChanged(float rmsdB) {
}
@Override
public void onBufferReceived(byte[] buffer) {
}
@Override
public void onEndOfSpeech() {
}
@Override
public void onError(int error) {
StringBuilder sb = new StringBuilder();
switch (error) {
case SpeechRecognizer.ERROR_AUDIO:
sb.append("音频问题");
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
sb.append("没有语音输入");
break;
case SpeechRecognizer.ERROR_CLIENT:
sb.append("其它客户端错误");
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
sb.append("权限不足");
break;
case SpeechRecognizer.ERROR_NETWORK:
sb.append("网络问题");
break;
case SpeechRecognizer.ERROR_NO_MATCH:
sb.append("没有匹配的识别结果");
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
sb.append("引擎忙");
break;
case SpeechRecognizer.ERROR_SERVER:
sb.append("服务端错误");
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
sb.append("连接超时");
break;
}
sb.append(":" + error);
Log.e("TAG", "识别失败:" + sb.toString());
}
@Override
public void onResults(Bundle results) {
ArrayList resultList = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));
mListener.onResult(resultStr);
}
//识别临时结果
@Override
public void onPartialResults(Bundle partialResults) {
ArrayList resultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String resultStr = Arrays.toString(resultList.toArray(new String[resultList.size()]));
mListener.onResult(resultStr);
}
@Override
public void onEvent(int eventType, Bundle params) {
}
public interface OnRecognizeListener {
void onResult(String result);
}
复现步骤、现象及其他描述:代码跟给出的demo是一样的,但是启动之后也不提示准备就绪,直接就执行onError返回没有匹配的识别结果。
回复儒雅的牛大春:
您好,您第一次进行联网授权了吗?
请到 http://yuyin.baidu.com/docs/asr/166核对程序中设置和应用是否一致(如api key和sercret key),然后您第一次联网设置授权