2010-06-15 156 views

回答

10

让我剪切并粘贴一下,告诉你你需要什么代码。

编辑:你也可以从this project下载一个方便的抽象类。

您将需要此意图(参数,你认为合适):

public Intent getRecognizeIntent(String promptToUse, int maxResultsToReturn) 
{ 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, maxResultsToReturn); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, promptToUse); 
    return intent; 
} 

然后,你需要你的意图发送到像这样的语音识别活动,

public void gatherSpeech(String prompt) 
{ 
    Intent recognizeIntent = getRecognizeIntent(prompt); 
    try 
    { 
     startActivityForResult(recognizeIntent, SpeechGatherer.VOICE_RECOGNITION_REQUEST_CODE); 
    } 
    catch (ActivityNotFoundException actNotFound) 
    { 
     Log.w(D_LOG, "did not find the speech activity, not doing it"); 
    } 
} 

然后你需要让你的活动处理语音结果:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    Log.d("Speech", "GOT SPEECH RESULT " + resultCode + " req: " 
     + requestCode); 
    if (requestCode == SpeechGatherer.VOICE_RECOGNITION_REQUEST_CODE) 
    { 
     if (resultCode == RESULT_OK) 
     { 
      ArrayList<String> matches = data 
          .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
      Log.d(D_LOG, "matches: "); 
      for (String match : matches) 
      { 
       Log.d(D_LOG, match); 
      } 
     } 
    } 
} 
+1

如何检测标点符号?我尝试了上面的代码,试着用“?”来表示问号,逗号用于“,”,指向“。”。 ,没有任何工作。 – 2011-09-08 10:55:04

+0

不幸的是,没有办法识别标点符号。 – gregm 2012-01-26 10:33:03

+0

谷歌不会返回标点符号。例如,如果我说“嘿,你在做什么?”,谷歌的一个解释很可能就是“嘿,你在做什么”。没有逗号,没有问号。 – Joey 2012-03-27 04:47:06

0

首先需要显示谷歌语音输入对话框,像这样

/** 
* Showing google speech input dialog 
* */ 
private void promptSpeechInput() { 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
      getString(R.string.speech_prompt)); 
    try { 
     startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); 
    } catch (ActivityNotFoundException a) { 
     Toast.makeText(getApplicationContext(), 
       getString(R.string.speech_not_supported), 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

则需要接受像这样的语音输入。

/** 
* Receiving speech input 
* */ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 
     case REQ_CODE_SPEECH_INPUT: { 
      if (resultCode == RESULT_OK && null != data) { 

       ArrayList<String> result = data 
         .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 
       txtSpeechInput.setText(result.get(0)); 
      } 
      break; 
     } 

    } 
} 

和需要设置REQ_CODE_SPEECH_INPUT

​​