2011-01-17 23 views
3

Android 2.2でRecognizerIntent APIを使用する際に問題が発生しています。私はこのコードを使用してAPIを呼び出すとき:RecognizerIntentが機能しません。 "missing call_package"

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によって識別するために 呼び出しパッケージを設定するためにこれを使用します。この余分が がシステムプロセス以外の誰かによって設定されている場合は、 検索実装によって無効にされます。

私が言うことができる限り、私はこの余分をオーバーライドする必要はありません。なぜこのエラーが発生するのですか?コードを修正するにはどうすればよいですか?

+0

"システムプロセス以外の誰でも" - あなた自身ではなく、独自の実装が必要なシステムプロセスですか? – zproxy

+0

どこからstartActivityForResult()を呼び出していますか?また、どのデバイスでこの問題が発生していますか?最後に、Google Voiceの認識設定は何ですか? –

答えて

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に示唆溶液です。

+0

うん。私は、context.getPackageName()、ハードコードされたパッケージ名など、さまざまな値を試してみました。 –

+2

おそらく、アクティビティやクラスに使用しているパッケージレイアウトや、ハードコードしようとしている値で質問を更新できますか? –

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 サイト:私のlogcatでの出力ラインのcode.google.com

一つ次のようになります。

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に変更)にこれらの行を置き、動作するかどうかを確認します。

5

私はまったく同じ問題を抱えていました。私が取り組んでいた活動で、アンドロイド:launchMode = "singleInstance"を持つ既存のコードに取り組んでいました。これは、音声認識装置の意図に対しては機能しません。私はアンドロイド:launchMode = "standard"に変更しました。さて、それが私のプログラムの残りの部分をどのように壊しているか見てみましょう:)

関連する問題