Как получить результат распознавания голоса на EditBox?

Я знаю, что существует множество тем и вопросов, касающихся распознавания голоса, и мой вопрос тоже может быть глупым. но, пожалуйста, потерпите меня, ребята.

Мне нужно получить результат распознавания речи в (редактируемое текстовое поле) вместо (массив списка), редактируемое текстовое поле, чтобы пользователь мог редактировать результат, как заметку.

Я нашел несколько вопросов, подобных моему, но я не мог понять, я все еще новичок по сравнению с вами, ребята.

Это код:

public class AVRScreen extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001;

private ListView mlvTextMatches;
private Button mbtSpeak;
private Button reButton;
private EditText result;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vr_screen);
Toast.makeText(this, "Press Speak! to Start Speeking",
         Toast.LENGTH_LONG).show();

result = (EditText) findViewById(R.id.out_text); 
mlvTextMatches = (ListView) findViewById(R.id.lvTextMatches);
mbtSpeak = (Button) findViewById(R.id.btSpeak);
reButton = (Button)findViewById(R.id.Replay1);
reButton.setOnClickListener(new OnClickListener(){


    public void onClick(View v) {

        startActivity(new Intent(v.getContext(),KeyBoard.class));
    } 
 });


checkVoiceRecognition();
}

public void checkVoiceRecognition() {
// Check if voice recognition is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() == 0) {
mbtSpeak.setEnabled(false);
mbtSpeak.setText("Voice recognizer not present");
Toast.makeText(this, "Voice recognizer not present",
 Toast.LENGTH_SHORT).show();

 }
 }

public void speak(View view) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);


intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass()
.getPackage().getName());

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

//Start the Voice recognizer activity for the result.
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}          


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE)

//If Voice recognition is successful then it returns RESULT_OK
if(resultCode == RESULT_OK) {

ArrayList<String> textMatchList = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

 if (textMatchList.get(0).contains("search")) {

 } else {
     // populate the Matches
     mlvTextMatches .setAdapter(new ArrayAdapter<String>      
(this,android.R.layout.simple_list_item_1,textMatchList));
 }

 }


 //Result code for various error.
{
 } if(resultCode == RecognizerIntent.RESULT_AUDIO_ERROR){
 showToastMessage("Audio Error");
}else if(resultCode == RecognizerIntent.RESULT_CLIENT_ERROR){
 showToastMessage("Client Error");
}else if(resultCode == RecognizerIntent.RESULT_NETWORK_ERROR){
showToastMessage("Network Error");
}else if(resultCode == RecognizerIntent.RESULT_NO_MATCH){
showToastMessage("No Match");
}else if(resultCode == RecognizerIntent.RESULT_SERVER_ERROR){
showToastMessage("Server Error");
}
 super.onActivityResult(requestCode, resultCode, data);
 }
/**
  * Helper method to show the toast message
  **/
  void showToastMessage(String message){
  Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
   }
 }

Это код после редактирования:

public class AVRScreen extends Activity {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001;

private Button mbtSpeak;
private Button reButton;
private EditText myEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vr_screen);
Toast.makeText(this, "Press Speak! to Start Speeking",
         Toast.LENGTH_LONG).show();

myEditText = (EditText) findViewById(R.id.out_text); 
mbtSpeak = (Button) findViewById(R.id.btSpeak);
reButton = (Button)findViewById(R.id.Replay1);
reButton.setOnClickListener(new OnClickListener(){


    public void onClick(View v) {

        startActivity(new Intent(v.getContext(),KeyBoard.class));
    } 
 });


checkVoiceRecognition();
}

public void checkVoiceRecognition() {
// Check if voice recognition is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() == 0) {
mbtSpeak.setEnabled(false);
mbtSpeak.setText("Voice recognizer not present");
Toast.makeText(this, "Voice recognizer not present",
 Toast.LENGTH_SHORT).show();

 }
 }

public void speak(View view) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);


intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass()
.getPackage().getName());

intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

//Start the Voice recognizer activity for the result.
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}          


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE)

//If Voice recognition is successful then it returns RESULT_OK
if(resultCode == RESULT_OK) {

ArrayList<String> textMatchList = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

 if (textMatchList.get(0).contains("search")) {

 } else {
    // populate the Matches
    myEditText.setText(textMatchList.toString());
    // if the above does not look good
    // for (String match : textMatchList) {
    //        myEditText.append(match + "\n"); // or whatever separator you want
        //   }
     }

}

вторая попытка:

 } else {
    // populate the Matches
    //myEditText.setText(textMatchList.toString());
    // if the above does not look good
    for (String match : textMatchList) {
           myEditText.append(match + "\n"); // or whatever separator you want
           }
     }

}

person K-19    schedule 11.05.2013    source источник
comment
Какую ошибку вы получили сейчас? опубликуйте свой логкэт.   -  person Hoan Nguyen    schedule 12.05.2013


Ответы (1)


person    schedule
comment
Спасибо, Хоан, но это то, что я получил в обоих случаях: к сожалению, приложение остановилось. Так жаль и так грустно. - person K-19; 12.05.2013
comment
Что вы подразумеваете под обоими случаями? - person Hoan Nguyen; 12.05.2013
comment
в следующий раз, когда я попытался: for (String match: textMatchList) { myEditText.append (match + \n);} - person K-19; 12.05.2013
comment
Вы поместили EditText в свой xml? Если вам не нужен список, просто удалите его и поместите в EditText. - person Hoan Nguyen; 12.05.2013
comment
Хорошо, вы поставили result.setText(textMatchList.toString()); или myEditText.setText(textMatchList.toString()); ? - person Hoan Nguyen; 12.05.2013
comment
Вы можете удалить mlvTextMatches .setAdapter(new ArrayAdapter‹String›... если вам не нужен список - person Hoan Nguyen; 12.05.2013
comment
Да, оба они, каждый по очереди, в коде не было ошибок, и проблема возникает после того, как речь сделана. Попробую удалить массив. - person K-19; 12.05.2013
comment
Если вы все еще получаете сообщение об ошибке, отредактируйте сообщение, чтобы добавить новый код, чтобы мы оба знали, о чем говорим. - person Hoan Nguyen; 12.05.2013
comment
Хорошо, мой плохой, похоже, возникла проблема с идентификатором поля редактирования, теперь он работает нормально, но дело в том, что я получаю все результаты, что я имел в виду в своем вопросе, чтобы получить первый результат, только если вы знаете что я имею в виду ? мой плохой тоже я не был ясно об этом, извините. - person K-19; 12.05.2013
comment
тогда вам нужно только сделать myEditText.setText(textMatchList.get(0)); - person Hoan Nguyen; 12.05.2013
comment
ОМГ!, Это работает! , я не знаю, как отблагодарить вас!! Это очень много значит для меня , большое спасибо , и мой голос за suer . /// Я не могу голосовать, потому что у меня мало баллов, но я обещаю. - person K-19; 12.05.2013
comment
Это нормально, рад, что могу помочь. - person Hoan Nguyen; 12.05.2013