【问题标题】:RecognizerIntent not working; "missing extra calling_package"识别器意图不起作用; “缺少额外的 call_package”
【发布时间】:2021-08-10 16:09:32
【问题描述】:

我在 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。如果这个额外是 由系统进程以外的任何人设置, 它应该被声音覆盖 搜索实现。

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

【问题讨论】:

  • "除了系统进程之外的任何人" - 你的不是需要自己实现的系统进程吗?
  • 你从哪里调用 startActivityForResult()?另外,您在哪个设备上看到此问题?最后,您的 Google Voice 识别设置是什么?

标签: android speech-recognition


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的原始代码:

    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 中执行以下查询并浏览源代码。

    识别器意图.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),看看它是否有效。

    【讨论】:

      【解决方案3】:

      您是否尝试过自己设置额外的?

      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 的建议解决方案。

      【讨论】:

      • 是的。我尝试了许多不同的值,包括 context.getPackageName()、硬编码的包名等。都没有。
      • 也许您可以使用您用于活动和课程的包布局以及您尝试硬编码的值来更新您的问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多