Android 将语音到文本API中的文本与TextView中的文本进行比较

Android 将语音到文本API中的文本与TextView中的文本进行比较,android,string,speech-to-text,Android,String,Speech To Text,迄今为止应用的简要说明: 用户看到一个包含单词的文本视图。用户将单击ImageButton,该按钮将触发Speech To Text API,并说出TextView上给出的单词。如果从语音到文本的文本与TextView中的文本匹配,则TextView会将文本更改为“correct!”等 问题是比较字符串文本值。TextView有“hello”。当我说“hello”时,SpeechToText api返回“hello”,但是文本值被认为是不同的 activity_main.xml Main.J

迄今为止应用的简要说明:

用户看到一个包含单词的文本视图。用户将单击ImageButton,该按钮将触发Speech To Text API,并说出TextView上给出的单词。如果从语音到文本的文本与TextView中的文本匹配,则TextView会将文本更改为“correct!”等

问题是比较字符串文本值。TextView有“hello”。当我说“hello”时,SpeechToText api返回“hello”,但是文本值被认为是不同的

activity_main.xml

Main.Java
package com.example.speechtotext;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.content.ActivityNotFoundException;
导入android.content.Intent;
导入android.os.Bundle;
导入android.speech.RecognizerIntent;
导入android.view.Menu;
导入android.view.view;
导入android.widget.ImageButton;
导入android.widget.TextView;
导入android.widget.Toast;
公共类主要扩展活动{
受保护的静态最终整数结果\u SPEECH=1;
专用图像按钮btnSpeak;
私有文本视图输入文本;
私有文本视图givenText;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inputText=(TextView)findViewById(R.id.inputText);
givenText=(TextView)findViewById(R.id.givenText);
btnSpeak=(图像按钮)findViewById(R.id.btnSpeak);
btnSpeak.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
意向意向=新意向(识别意向、行动、识别言语);
intent.putExtra(RecognizerIntent.EXTRA_语言_模型,“en-US”);
试一试{
startActivityForResult(意图、结果和演讲);
inputText.setText(“”);
}捕获(ActivityNotFoundException a){
Toast t=Toast.makeText(getApplicationContext(),
“您的设备不支持语音到文本!”,Toast.LENGTH\u SHORT);
t、 show();
}
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
开关(请求代码){
个案结果(演讲):{
if(resultCode==RESULT\u OK&&null!=数据){
ArrayList文本=数据
.getStringArrayListExtra(识别器意图.额外结果);
inputText.setText(text.get(0));
if(givenText.getText().toString().equals(inputText.getText().toString())){
setText(“正确!”);
}
否则{
setText(“不正确!”);
}
}
打破
}
}
}
}

有什么想法吗?

您所面临的问题可以通过更改代码中的一行来轻松解决,即:

if(givenText.getText().toString().equals(inputText.getText().toString())){
改为:

if(givenText.getText().toString().equalsIgnoreCase(inputText.getText().toString())){

另外,我在开发类似应用程序时做了一个总体观察,我注意到语音识别API并不完美,除非您/您的用户的口音与API培训时的口音相匹配,否则无法正常工作。因此,为了解决这个问题,你应该考虑通过返回的字符串列表并检查它们,看看其中是否有一个与你给用户显示的文本匹配。
if(givenText.getText().toString().equals(inputText.getText().toString())){
if(givenText.getText().toString().equalsIgnoreCase(inputText.getText().toString())){