在我的应用中,我直接使用SpeechRecognizer。我销毁SpeechRecognizer onPause of Activity,我在onResume方法中重新创建它,如下所示......
public class NoUISpeechActivity extends Activity {
protected static final String CLASS_TAG = "NoUISpeechActivity";
private SpeechRecognizer sr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_no_uispeech);
sr = getSpeechRecognizer();
}
@Override
protected void onPause() {
Log.i(CLASS_TAG, "on pause called");
if(sr!=null){
sr.stopListening();
sr.cancel();
sr.destroy();
}
super.onPause();
}
@Override
protected void onResume() {
Log.i(CLASS_TAG, "on resume called");
sr = getSpeechRecognizer();
super.onResume();
}
....
private SpeechRecognizer getSpeechRecognizer() {
if(sr == null){
sr = SpeechRecognizer.createSpeechRecognizer(getApplicationContext());
CustomRecognizerListner listner = new CustomRecognizerListner();
listner.setOnListeningCallback(new OnListeningCallbackImp());
sr.setRecognitionListener(listner);
}
return sr;
}
}
当第一次通过eclipse安装应用程序时,会调用SpeechRecognition服务并正确识别。但是当应用程序从暂停状态返回时,如果我尝试识别语音,我会收到“SpeechRecognition:not connect to recognition service”错误
我做错了什么?
答案 0 :(得分:5)
我找到了问题的原因。在调用onPause
方法的SpeechRecognition.destroy()
方法中,我猜它只是分离服务但对象sr
将指向某个实例并且它不会为空。将对象sr
重置为null可以解决问题。
不会破坏SpeechRecognition
方法中的onPause
对象会阻止其他应用使用SpeechRecognition
服务
@Override
protected void onPause() {
Log.i(CLASS_TAG, "on pause called");
if(sr!=null){
sr.stopListening();
sr.cancel();
sr.destroy();
}
sr = null;
super.onPause();
}
答案 1 :(得分:0)
只需停止调用stopListening()和cancel()方法即可。而是仅调用destroy()方法。 这应该可以解决问题:)