首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语音识别器在编辑文本错误中设置文本(Android studio)

语音识别器在编辑文本错误中设置文本(Android studio)
EN

Stack Overflow用户
提问于 2021-10-29 15:16:23
回答 1查看 57关注 0票数 0

我正在使用语音识别器的语音到文本概念,但是当文本被设置为编辑文本时,编辑文本中的现有文本将被擦除,而从语音转换而来的文本将被设置在其位置。

但是,我希望转换后的文本设置在现有文本之后,而不是替换现有文本。

代码语言:javascript
复制
public class AddNoteActivity extends AppCompatActivity {
public static final int RECORDAUDIOREQUESTCODE = 1;
private SpeechRecognizer speechRecognizer;
ImageView micButton;

public static final String EXTRA_ID = "EXTRA_ID";

public static final String EXTRA_TITLE =
        "EXTRA_TITLE";
public static final String EXTRA_DESCRIPTION =
        "EXTRA_DESCRIPTION";
private EditText editTextTitle;
private EditText editTextDescription;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_note);
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)!=
            PackageManager.PERMISSION_GRANTED){
        checkPermission();
    }
    editTextTitle = findViewById(R.id.edit_text_title);
    editTextDescription = findViewById(R.id.edit_text_description);
    Objects.requireNonNull(getSupportActionBar()).setHomeAsUpIndicator(R.drawable.ic_baseline_close_24);
    micButton = findViewById(R.id.mic);
    speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
    final Intent speechRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    speechRecognizer.setRecognitionListener(new RecognitionListener() {
        @Override
        public void onReadyForSpeech(Bundle params) {

        }

        @Override
        public void onBeginningOfSpeech() {
            editTextDescription.setSelection(editTextDescription.getText().length());
        }

        @Override
        public void onRmsChanged(float rmsdB) {

        }

        @Override
        public void onBufferReceived(byte[] buffer) {

        }

        @Override
        public void onEndOfSpeech() {
            editTextDescription.setSelection(editTextDescription.getText().length());
        }

        @Override
        public void onError(int error) {

        }

        @Override
        public void onResults(Bundle results) {
            micButton.setImageResource(R.drawable.ic_baseline_mic_off_24);
            ArrayList<String> data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
            editTextDescription.setSelection(editTextDescription.getText().length());
            editTextDescription.setText(data.get(0));
        }

        @Override
        public void onPartialResults(Bundle partialResults) {

        }

        @Override
        public void onEvent(int eventType, Bundle params) {

        }
    });
    micButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            micButton.setImageResource(R.drawable.ic_baseline_mic_24);
            speechRecognizer.startListening(speechRecognizerIntent);
        }
    }); 
 @Override
protected void onDestroy(){
    super.onDestroy();
    speechRecognizer.destroy();
}
private void checkPermission(){
    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.RECORD_AUDIO},
                RECORDAUDIOREQUESTCODE);
    }
}
 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
    super.onRequestPermissionsResult(requestCode,permissions,grantResults);
    if(requestCode==RECORDAUDIOREQUESTCODE && grantResults.length>0){
        if(grantResults[0]==PackageManager.PERMISSION_GRANTED)
            Toast.makeText(this, "Permission Granted", Toast.LENGTH_LONG).show();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-29 15:22:20

代码语言:javascript
复制
@Override
public void onResults(Bundle results) {
    micButton.setImageResource(R.drawable.ic_baseline_mic_off_24);
    ArrayList<String> data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
    editTextDescription.setSelection(editTextDescription.getText().length());
    editTextDescription.setText(data.get(0));
}

你告诉它高亮整个文本,然后设置文本。这将删除任何选择(这也是多余的,因为如果您没有设置选择,同样的事情也会发生)。如果您想继续它,请使用

代码语言:javascript
复制
editTextDescription.setText(editTextDescription.getText().toString()+data.get(0))

应该替换该函数的最后两行。它将获取现有文本,将新结果附加到该文本,并将总字符串设置为视图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69771227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档