You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中文语音识别文本匹配变色异常问题求助

问题解决:语音识别对比后文本始终显示红色

核心错误点

  • 调用时机错误:点击麦克风按钮时,你先调用speak()启动语音识别(这是异步操作,不会立刻返回结果),紧接着就调用checkIfCorrect(),此时语音识别结果还未写入mTextView,比较的是旧数据,必然不匹配。
  • 文本获取错误:checkIfCorrect()中用input.toString()和mTextView.toString()获取的是TextView对象的字符串表示,不是控件上显示的文本内容,应该用getText().toString()。

修改后的代码

public class SpeakingActivity extends AppCompatActivity {
private static final int REQUEST_CODE_SPEECH_INPUT = 1000;
TextView mTextView;
TextView input;
ImageButton mImageButton;
Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.speakingfromhome);
    button = findViewById(R.id.nextSpeaking);
    mTextView = findViewById(R.id.output);
    mImageButton = findViewById(R.id.image);
    input = findViewById(R.id.input);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            changeQuestions();
            mTextView.setTextColor(Color.BLACK);
        }
    });
    mImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            speak();
            // 移除此处的checkIfCorrect()调用,移到语音识别结果返回后执行
        }

    });
}


private void checkIfCorrect() {
    // 改为获取控件的文本内容进行比较
    if (input.getText().toString().equals(mTextView.getText().toString()))
        mTextView.setTextColor(Color.GREEN);
    else
        mTextView.setTextColor(Color.RED);
}

private void changeQuestions() {
    input.setText("基辅");
}

private void speak() {
    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.CHINA.toString());
    try {
        startActivityForResult(intent, REQUEST_CODE_SPEECH_INPUT);

    } catch (Exception ex) {
        Toast.makeText(this, "" + ex.getMessage(), Toast.LENGTH_SHORT).show();
    }

}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case REQUEST_CODE_SPEECH_INPUT: {
            if (resultCode == RESULT_OK && null != data) {
                ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                mTextView.setText(result.get(0));
                // 语音识别结果返回后,再执行对比逻辑
                checkIfCorrect();
            }
            break;
        }
    }
}
}

额外优化建议

  • 可以给文本添加trim()处理,避免语音识别返回的文本带首尾空格导致匹配失败。
  • 若语音识别返回多个候选结果,可尝试匹配前2-3个结果,提升识别容错率。

内容的提问来源于stack exchange,提问作者Jugjin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:15:16