【发布时间】:2021-12-14 16:01:06
【问题描述】:
我正在使用语音识别器使用语音到文本的概念,但是当文本设置为编辑文本时,编辑文本中的现有文本被删除,从语音转换的文本被设置在它的位置。 但是,我希望在现有文本之后设置转换后的文本,而不是替换现有文本。
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();
}
}
【问题讨论】:
标签: android android-edittext speech-recognition speech-to-text