【问题标题】:SpeechRecognizer : not connected to recognition serviceSpeechRecognizer : 未连接到识别服务
【发布时间】:2019-04-17 19:25:12
【问题描述】:

在我的应用程序中,我直接使用 SpeechRecognizer。我销毁 Activity 的 SpeechRecognizer onPause 并在 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:未连接到识别服务”错误

我做错了什么?

【问题讨论】:

  • 连续检测语音没有问题吗?说在听者得到一些结果之后?
  • 连续,你的意思是语音识别器一直在后台运行吗?
  • 是的。似乎在调用 onResults 方法后服务会自行杀死。

标签: android speech-recognition


【解决方案1】:

我找到了问题的原因。在onPause 方法中虽然调用了SpeechRecognition.destroy() 方法,但我猜它只是分离了服务,但对象sr 将指向某个实例并且它不会为空。将对象 sr 重置为 null 可以解决问题。

不破坏onPause方法中的SpeechRecognition对象会阻止其他应用使用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();
}

【讨论】:

  • 是的。我认为最好延迟加载 SpeechRecognizer 对象。
  • 有没有办法为主要活动恢复 SpeechRecognizer,然后在移动到应用程序中的第二个活动时将其销毁。目前,我在两个单独的活动中遇到 SpeechRecognizer 和 Googles Speech to Text 之间的冲突。你能提供任何建议@JeeZ
  • 抱歉回复延迟,是的,您可以这样做。移出活动时首先在活动的 onStop() 中销毁 SpeechRecognizer,然后在 onRestart() 中再次实例化。
【解决方案2】:

停止调用 stopListening() 和 cancel() 方法即可。而是只调用destroy() 方法。 这应该可以解决问题:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多