我正在使用語音識別器使用語音到文本的概念,但是當文本設定為編輯文本時,編輯文本中的現有文本將被洗掉,并將從語音轉換的文本設定在其位置。
但是,我希望在現有文本之后設定轉換后的文本,而不替換現有文本。

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();
}
}
uj5u.com熱心網友回復:
@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));
}
您告訴它突出顯示整個文本,然后設定文本。這將擺脫任何選擇(這也是多余的,因為如果您沒有設定選擇,也會發生同樣的事情)。如果要繼續,請使用
editTextDescription.setText(editTextDescription.getText().toString() data.get(0))
那應該替換該函式的最后兩行。它將獲取現有文本,將新結果附加到它,并將總字串設定為視圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341614.html
