2017-09-12 72 views
0

我创建了两个编辑文本。我创建了两个按钮。通过点击一个按钮,它会要求用户说话,它会将语音转换为文本,并且会在编辑文本中显示 。android设置语音到文本的两个编辑文本

我已经将语音转换为文本功能两次了。第一个编辑文本和第二个编辑文本。但它显示错误。 请帮我解决这个问题。

这里是我的代码:

private void promptSpeechInput1() { 
    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); 
       txtSpeechInput1.setText(result.get(0)); 

      } 
      break; 
     } 

    } 
} 



////////////// 


private void promptSpeechInput2() { 
    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); 
       txtSpeechInput2.setText(result.get(0)); 
      } 
      break; 
     } 

    } 
} 

和错误显示就行了:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
+0

请分享你的错误日志 –

+0

错误:方法onActivityResult(INT,INT,意图)已经在课堂上MainActivity 执行失败的任务“中定义:应用程序:compileDebugJavaWithJavac”。 编译失败; – bubbly

回答

0

您正在重新定义onActivityResult方法。为您的目的只使用一个实例

/** 
* Receiving speech input and output 
* */ 
@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); 
      txtSpeechInput1.setText(result.get(0)); 

     } 
     break; 
    } 
    case REQ_CODE_SPEECH_OUTPUT: { 
     if (resultCode == RESULT_OK && null != data) { 

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

    } 



    } 
} 

并在您的promptSpeechInput2方法中对其进行修改。即使用不同的请求的代码不REQ_CODE_SPEECH_INPUT别人使用REQ_CODE_SPEECH_OUTPUT具有不同的价值

try { 
    startActivityForResult(intent, REQ_CODE_SPEECH_OUTPUT); 
} catch (ActivityNotFoundException a) { 
    Toast.makeText(getApplicationContext(), 
      getString(R.string.speech_not_supported), 
      Toast.LENGTH_SHORT).show(); 
} 
+0

你试过这个@bubbly吗? –

+0

是的!它的工作原理..谢谢@Shriyansh – bubbly

+0

请让我知道你的邮件ID。所以我可以向你提出任何疑问。@ Shriyansh Gautam – bubbly