SpeechRecognizer 导致 ANR...我需要 Android 语音 API 方面的帮助

2024-02-05

EDIT:我应该已经提到过这一点,但我正在服务中运行此代码。整个应用程序通过小部件按钮打开/关闭,并且没有任何活动。


Update:我尝试将 SDK 源附加到项目中,这样我就可以更准确地了解故障发生的位置,但是从,仅包含公共 API,这似乎使它们的用处大大降低...任何人都可以建议至少一种调试方法来解决此问题吗?我有点卡住了。


我正在尝试使用 Android 的语音识别包 http://developer.android.com/reference/android/speech/package-summary.html记录用户语音并将其翻译为文本。不幸的是,当我尝试启动监听时,我收到一个 ANR 错误,该错误没有指出任何具体内容。

正如 SpeechRecognizer API 所示,如果您尝试从主线程调用它,则会抛出 RuntimeException。这让我想知道处理是否要求太高了……但我知道其他应用程序使用 Android API 来实现此目的,而且它通常非常快速。

java.lang.RuntimeException: SpeechRecognizer should be used only from the application's main thread

这是我尝试从我的服务调用的代码的(经过修剪的)示例。这是正确的方法吗?

感谢您抽出时间提供帮助。这一直是我至今无法逾越的坎。

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
        "com.domain.app");

SpeechRecognizer recognizer = SpeechRecognizer
        .createSpeechRecognizer(this.getApplicationContext());
RecognitionListener listener = new RecognitionListener() {
    @Override
    public void onResults(Bundle results) {
        ArrayList<String> voiceResults = results
                .getStringArrayList(RecognizerIntent.EXTRA_RESULTS);
        if (voiceResults == null) {
            Log.e(getString(R.string.log_label), "No voice results");
        } else {
            Log.d(getString(R.string.log_label), "Printing matches: ");
            for (String match : voiceResults) {
                Log.d(getString(R.string.log_label), match);
            }
        }
    }

    @Override
    public void onReadyForSpeech(Bundle params) {
        Log.d(getString(R.string.log_label), "Ready for speech");
    }

    @Override
    public void onError(int error) {
        Log.d(getString(R.string.log_label),
                "Error listening for speech: " + error);
    }

    @Override
    public void onBeginningOfSpeech() {
        Log.d(getString(R.string.log_label), "Speech starting");
    }
};
recognizer.setRecognitionListener(listener);
recognizer.startListening(intent);

确保使用 RECORD_AUDIO 权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpeechRecognizer 导致 ANR...我需要 Android 语音 API 方面的帮助 的相关文章

随机推荐