【问题标题】:Android SpeechRecognizer fails on second listenAndroid SpeechRecognizer 在第二次收听时失败
【发布时间】:2015-09-19 16:59:00
【问题描述】:

我遇到了 SpeechRecognizer 可以正确收听的问题,当我让它转到 SpeechRecognizer.ERROR_NO_MATCH 时,我下次收听时识别器立即无法到 SpeechRecognizer.ERROR_NO_MATCH。我第三次听将再次工作。有任何想法吗?下面的代码:此外,当错误代码为 SpeechRecognizer.ERROR_SPEECH_TIMEOUT 时也能正常工作,将在第二次正确收听。

@Override
    public void onError(int error) {
        switch (error) {
            case SpeechRecognizer.ERROR_AUDIO:
                showLog("ERROR_AUDIO");
                endTimer();
                break;
            case SpeechRecognizer.ERROR_CLIENT:
                showLog("ERROR_CLIENT");
                endTimer();
                break;
            case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
                showLog("ERROR_RECOGNIZER_BUSY");
                endTimer();
                break;
            case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
                showLog("ERROR_INSUFFICIENT_PERMISSIONS");
                endTimer();
                break;
            case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
                showLog("ERROR_NETWORK_TIMEOUT");
                endTimer();
                break;
            case SpeechRecognizer.ERROR_NETWORK:
                sr.destroy();
                showLog("ERROR_NETWORK");
                endTimer();
                break;
            case SpeechRecognizer.ERROR_SERVER:
                showLog("ERROR_SERVER");
                endTimer();
                break;
            case SpeechRecognizer.ERROR_NO_MATCH:
                showLog("ERROR_NO_MATCH");
                break;
            case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
                showLog("ERROR_SPEECH_TIMEOUT");
                break;
            default:
                assert false;
                return;
        }
    }

【问题讨论】:

    标签: android speech-recognition text-to-speech speech


    【解决方案1】:

    这是“谷歌应用程序”中的一个错误,卸载谷歌应用程序的更新,它将清除问题或按照这个答案做 SpeechRecognizer throws onError on the first listening

    【讨论】:

    • 欣赏答案
    【解决方案2】:

    尝试先取消导致错误的识别器,然后重新开始监听。

    public void onError(int error) {
        // put this where the bug occurs
        recognizer.cancel();
        recognizer.startListening(yourIntent);
    }
    

    我发现它帮助解决了很多由错误引起的错误。

    【讨论】:

    • 这是一个非常糟糕的建议。这样做将导致识别器在发生错误时继续重新启动,例如 ERROR_NETWORK。基本上会在 UI 线程上造成持续循环。
    猜你喜欢
    • 1970-01-01
    • 2021-04-02
    • 2010-12-21
    • 2016-08-25
    • 2015-02-01
    • 2011-09-02
    • 1970-01-01
    • 2015-01-03
    • 2013-12-17
    相关资源
    最近更新 更多