android如何处理错误,android – 处理RecognitionListener错误

我正在使用

Android的语音API来不断获取用户的输入.但是,当发生错误时,这不能很好地工作.

我所做的是在检测错误的方法中重新启动监听器.它有时会工作,但识别器会经常挂起一段时间.特别是在检测到服务器,网络超时和识别器忙碌错误后.这很烦人!

我找到了一些解决这个问题的尝试,但没有一个能为我工作.

你有更好的主意吗?

这是我的代码:

private void startSR(){

intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

//intent.putExtra(RecognizerIntent., value)

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, mContext.getPackageName());

intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 10);

Log.d(TAG,"Speech recognition started!");

if (recognizer != null) {

recognizer = null;

mListener = null;

}

Log.d(TAG,"setRecognitionListener");

recognizer = SpeechRecognizer.createSpeechRecognizer(mContext);

mListener = new Listener();

recognizer.setRecognitionListener(mListener);

recognizer.startListening(intent);

}

class Listener implements RecognitionListener{

@Override

public void onBeginningOfSpeech() {

Log.i(TAG, "onBeginningOfSpeech");

mStatus = "Beginning speech";

}

@Override

public void onBufferReceived(byte[] buffer) {

Log.i(TAG, "onBufferReceived");

}

@Override

public void onEndOfSpeech() {

Log.i(TAG, "onEndOfSpeech");

mStatus = "Speech ended";

}

@Override

public void onEvent(int eventType, Bundle params) {

Log.i(TAG, "onEvent " + eventType);

}

@Override

public void onPartialResults(Bundle partialResults) {

Log.i(TAG, "onPartialResults");

mStatus = "Partial results";

}

@Override

public void onReadyForSpeech(Bundle params) {

Log.i(TAG, "onReadyForSpeech");

mReady = true;

mStatus = "Speech engine ready";

}

@Override

public void onRmsChanged(float rmsdB) {

// TODO Auto-generated method stub

}

@Override

public void onError(int error) {

// TODO Auto-generated method stub

mError = "";

mStatus = "Error detected";

switch (error) {

case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:

mError = " network timeout";

startListening();

break;

case SpeechRecognizer.ERROR_NETWORK:

mError = " network" ;

//toast("Please check data bundle or network settings");

return;

case SpeechRecognizer.ERROR_AUDIO:

mError = " audio";

break;

case SpeechRecognizer.ERROR_SERVER:

mError = " server";

startListening();

break;

case SpeechRecognizer.ERROR_CLIENT:

mError = " client";

break;

case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:

mError = " speech time out" ;

break;

case SpeechRecognizer.ERROR_NO_MATCH:

mError = " no match" ;

startListening();

break;

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:

mError = " recogniser busy" ;

break;

case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:

mError = " insufficient permissions" ;

break;

}

Log.i(TAG, "Error: " + error + " - " + mError);

//startSR();

}

@Override

public void onResults(Bundle results) {

mStatus = "Got some results";

mResultAvailable = true;

String str = new String();

Log.d(TAG, "onResults " + results);

mResults = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

//mConfidences = results.getDoubleArray(SpeechRecognizer.CONFIDENCE_SCORES);

Log.i(TAG, toString());

startListening();

}

}// class Listener

public ArrayList getResults(){

return mResults;

}

public void startListening(){

if (SpeechRecognizer.isRecognitionAvailable(mContext)) {

if (recognizer!=null){

recognizer.startListening(intent);

mResultAvailable = false;

mResults = new ArrayList();

}

else

startSR();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值