识别器内容不起作用; “缺少额外的calling_package”

时间:2011-01-17 22:31:36

标签: android speech-recognition

我在Android 2.2上使用RecognizerIntent API时遇到问题。当我使用此代码调用API时:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
startActivityForResult(intent, REQUEST_CODE_VOICE_SEARCH);

看起来它应该可以工作,搜索弹出窗口在设备和日志中说“未知问题”:

01-17 14:25:30.433: ERROR/RecognitionActivity(9118): ACTION_RECOGNIZE_SPEECH intent called incorrectly. Maybe you called startActivity, but you should have called startActivityForResult (or otherwise included a pending intent).
01-17 14:25:30.433: INFO/RecognitionControllerImpl(9118): startRecognition(#Intent;action=android.speech.action.RECOGNIZE_SPEECH;launchFlags=0x800000;component=com.google.android.voicesearch/.IntentApiActivity;B.fullRecognitionResultsRequest=true;S.android.speech.extra.LANGUAGE_MODEL=free_form;end)
01-17 14:25:30.433: INFO/RecognitionControllerImpl(9118): State change: STARTING -> STARTING
01-17 14:25:30.443: ERROR/RecognitionControllerImpl(9118): required extra 'calling_package' missing in voice search intent
01-17 14:25:30.443: ERROR/RecognitionControllerImpl(9118): ERROR_CLIENT
01-17 14:25:30.443: ERROR/RecognitionControllerImpl(9118): ERROR_CLIENT

看起来问题是缺少“calling_package”额外的;在RecognizerIntent页面上,它指出这个额外的是:

  

语音识别器用于语音的意图中使用的额外密钥   搜索。通常不被使用   开发人员。系统搜索对话框   例如,使用它来设置一个   通过调用包来识别   语音搜索API。如果这个额外的话   由系统进程以外的任何人设置,   它应该被声音覆盖   搜索实施。

据我所知,我不需要覆盖这个额外的,所以为什么我会收到这个错误?我该如何修复我的代码?

3 个答案:

答案 0 :(得分:6)

我遇到了完全相同的问题。我正在处理我正在处理的活动中具有android:launchMode =“singleInstance”的现有代码。这对于语音识别器意图不起作用。我把它改成了android:launchMode =“standard”。现在让我们看看它如何打破我程序的其余部分:)

答案 1 :(得分:3)

您的原始代码:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
startActivityForResult(intent, REQUEST_CODE_VOICE_SEARCH);

正常工作。我在我的设备(HTC Desire)上进行了测试,并将其与其他开源用户进行了比较,在Google中执行以下查询,并浏览源代码。

  

RecognizerIntent.ACTION_RECOGNIZE_SPEECH   网站:code.google.com

我的logcat中的一个输出行如下所示:

01-26 13:28:53.268: INFO/RecognitionController(1459): startRecognition(#Intent;action=android.speech.action.RECOGNIZE_SPEECH;component=com.google.android.voicesearch/.IntentApiActivity;B.fullRecognitionResultsRequest=true;S.android.speech.extra.LANGUAGE_MODEL=web_search;S.calling_package=com.test;end)

使用其中一个内置应用程序(或已下载的应用程序)运行类似搜索,查看它是否有效(并且不是设备问题等)。

如果能正常工作,请将代码放到新的测试项目中,只需将这些行放在onCreate中(将结果常量更改为0),看看它是否有效。

答案 2 :(得分:2)

你是否尝试过额外设置?

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
intent.putExtra("calling_package","com.yourpackagename.YourActivityClassName");
startActivityForResult(intent, REQUEST_CODE_VOICE_SEARCH);

这是this code使用的方法,是similar issue的建议解决方案。