2012-03-25 16 views
2

すべての使用可能なオプション(つまり余分なもの)をテストするために、this exampleからインスピレーションを受けた簡単なアプリケーションを作成しました。私はEXTRA_PARTIAL_RESULTS extraについて読んでいます。このオプションを有効にすると、音声認識に関連する部分的な結果がサーバから受信されるはずです。しかし、この余分をACTION_RECOGNIZE_SPEECHインテントに追加すると、音声認識はもう機能しません。リストには結果が表示されません。音声認識を使用した部分的な結果

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) { 
     switch(resultCode) { 
     case RESULT_OK: 
      Log.i(TAG, "RESULT_OK"); 
      processResults(data); 
      break; 
     case RESULT_CANCELED: 
      Log.i(TAG, "RESULT_CANCELED"); 
      break; 
     case RecognizerIntent.RESULT_AUDIO_ERROR: 
      Log.i(TAG, "RESULT_AUDIO_ERROR"); 
      break; 
     case RecognizerIntent.RESULT_CLIENT_ERROR: 
      Log.i(TAG, "RESULT_CLIENT_ERROR"); 
      break; 
     case RecognizerIntent.RESULT_NETWORK_ERROR: 
      Log.i(TAG, "RESULT_NETWORK_ERROR"); 
      break; 
     case RecognizerIntent.RESULT_NO_MATCH: 
      Log.i(TAG, "RESULT_NO_MATCH"); 
      break; 
     case RecognizerIntent.RESULT_SERVER_ERROR: 
      Log.i(TAG, "RESULT_SERVER_ERROR"); 
      break; 
     default: 
      Log.i(TAG, "RESULT_UNKNOWN"); 
      break; 
     } 
    } 
    Log.i(TAG, "Intent data: " + data); 
    super.onActivityResult(requestCode, resultCode, data); 
} 

private void processResults(Intent data) { 
    Log.i(TAG, "processResults()"); 

    ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 

    // list of results 
    ListView listOfResults = (ListView)(findViewById(R.id.list_of_results)); 
    listOfResults.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches)); 

    // number of elements of above list 
    TextView resultsCount = (TextView)(findViewById(R.id.results_count)); 
    resultsCount.setText(getString(R.string.results_count_label) + ": " + matches.size()); 
} 

このオプションを有効にすると、結果リストの要素数が1になり、この1つの結果は空の文字列になります。この行動の理由は何ですか?

に追加詳細情報を 私は(アンドロイド2.3.5上)EXTRA_PARTIAL_RESULTSオプションを有効にするために、次のコードを使用していました。

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, ...); 
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3); 
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, ...); 
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); // where VOICE_RECOGNITION_REQUEST_CODE is a "global variable" 

ただし、このオプションを有効にする、ArrayList<String> matchesprocessResults方法は一つだけ空の要素を持っています。

+0

EXTRA_PARTIAL_RESULTSの内側には? – gregm

+0

"pratial results"オプションを有効または無効にするために使用できる定数文字列値( '" android.speech.extra.PARTIAL_RESULTS "')なので、ブール値 'true'を設定します。 – enzom83

答えて

2

のGoogleドキュメントはこの言うので、私はPARTIAL_RESULTSに頼らないことをお勧め:私の経験で The server may ignore a request for partial results in some or all cases.

は、Googleはほとんど常に部分的な結果のための要求を無視します。

しかし、私はEXTRA_PARTIAL_RESULTSを設定すると通常のEXTRA_RESULTSが返されるとは思わないと思います。それは効果がないはずです。私は自分のコードでこれをテストして、EXTRA_PARTIAL_RESULTSを追加しても出力は変わりません。

また、SpeechRecognizerを使用していない限り、Androidからエラーコードが送信されることはありません。

EXTRA_PARTIAL_RESULTSが結果を妨げないことを確認してください。このメソッド内の余分を追加hereからコードを取得する:

private void sendRecognizeIntent() 
{ 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say the magic word"); 
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 100); 
    startActivityForResult(intent, SPEECH_REQUEST_CODE); 
} 
+0

Android 2.3.5でのテスト( 'EXTRA_PARTIAL_RESULTS'オプション付き)がうまくいかない理由を知りたいのですが。部分的な結果を要求するためにどのような指示をしましたか? (私は単にこれを意図に追加しました。質問の最後に追加した詳細を参照してください)。部分的な結果にアクセスするためにどのような指示をしましたか?完全な結果と一緒に返されるべきか...そうでないか? – enzom83

+1

ここからコードを取得します:https://github.com/gmilette/Say-the-Magic-Word- 次に、intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS、true)を追加します。 注:Android 4.0.3でテストしました – gregm

+0

すぐにあなたのリンクからコードを試してみましょう!同じ問題が発生した場合、これを引き起こす可能性がありますか? Androidのバージョン2.3.5または音声認識のバージョン(私は音声検索2.1.3を持っています)? – enzom83