SpeechRecognizer导致ANR …我需要Android语音API的帮助

编辑:我应该已经提到过了,但是我正在运行这个代码.整个应用程序通过小部件按钮打开/关闭,没有任何活动.

更新:我尝试将SDK源附加到项目中,以便我们能够更准确地了解发生故障的地方,但从the looks of it开始,仅包含公共API,这似乎使它们不那么有用…任何人都可以至少提出一个解决这个问题的调试方法我有点卡住了

我正在尝试使用Android的speech recognition package来录制用户语音并将其翻译成文字.不幸的是,当我尝试开始侦听时,我得到一个不指向任何具体的ANR错误.

如SpeechRecognizer API所示,如果您尝试从主线程调用RuntimeException,则会抛出RuntimeException异常.这将使我想知道处理是否太苛刻,但是我知道其他应用程序使用Android API来达到这个目的,它通常很漂亮.

java.lang.RuntimeException:SpeechRecognizer只能从应用程序的主线程使用

这是一个(修剪)的示例,我试图从我的服务调用代码.这是正确的做法吗?

感谢您抽出时间帮忙.这是我一直没有得到解决的障碍.

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);

解决方法

您不需要自己创建SpeechRecognizer类,也不需要实现RecognizerListener. Google让他们公开做得很好,但是它们看起来很复杂,可能仅供专家使用.

要从用户语音中获取文本,只需使用RecognizerIntent.ACTION_RECOGNIZE_SPEECH启动内置的语音识别器Activity,然后等待结果返回onActivityResult.看看这里的示例代码

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.html

我把它从这篇文章.

http://developer.android.com/resources/articles/speech-input.html

祝你好运.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...