RecognizerIntent не работает;"пропущен дополнительный пакет вызова" - PullRequest
4 голосов
/ 18 января 2011

У меня проблемы с использованием RecognizerIntent API на Android 2.2. Когда я вызываю 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

Похоже, проблема в том, что отсутствует дополнительная функция "call_package"; на странице RecognizerIntent говорится, что это дополнительно:

Дополнительная клавиша, используемая в целях распознавания речи для голоса поиск. Обычно не используется Разработчики. Диалог поиска системы использует это, например, чтобы установить вызывая пакет для идентификации API голосового поиска. Если это дополнительно устанавливается кем-либо, кроме системного процесса, это должно быть отменено голосом реализация поиска.

Насколько я могу судить, мне не нужно переопределять это дополнительное, так почему я получаю эту ошибку? Как я могу исправить свой код?

Ответы [ 3 ]

6 голосов
/ 08 февраля 2011

У меня была точно такая же проблема.Я работал над существующим кодом, в котором был android: launchMode = "singleInstance" в деятельности, над которой я работал.Это не будет работать для намерения распознавателя речи.Я изменил его на Android: launchMode = "стандарт".Теперь посмотрим, как это сломает остальную часть моей программы:)

3 голосов
/ 26 января 2011

Ваш оригинальный код:

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 голосов
/ 23 января 2011

Вы сами пытались настроить дополнительные функции?

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

Этот подход используется этим кодом и является предлагаемым решением аналогичной проблемы .

...