Я пытаюсь проанализировать результаты из активности распознавания голоса Android и обнаружил, что все слова (разделенные пробелом) находятся в первом индексе массива.
Я ожидал, что он поместит все слова в каждый индекс массива.
private void startVoiceRecognitionActivity()
{
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
long wait = 10000;
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, wait);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak Now");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
/**
* Handle the results from the recognition activity.
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)
{
// Fill the list view with the strings the recognizer thought it could have heard
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
/*mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
matches)); */
//start intent after we get list of items
mListIntent = new Intent();
mListIntent.setClassName(Consts.CLASS_PATH,
ActivityUtil.getInstance().getClassName()); //get class name based
//on current activity
//now set array 'matches' from above and send to next activity...
Bundle bundle = new Bundle();
bundle.putStringArrayList(Consts.BUNDLE_KEY_VOICE_LIST, matches);
mListIntent.putExtras(bundle);
startActivity(mListIntent);
//TODO: also how do we add to google dictionary?
}
super.onActivityResult(requestCode, resultCode, data);
}
У вас есть дополнительная цитата на этой строке:
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak Now" ");
Просто удалите его.
Это может сработать.
Я дал код, который вы можете просто скопировать, и вы закончили.. здесь
Просто нашел это сейчас. Если кто-нибудь еще найдет это, проблема не в дополнительном речевом знаке (хотя это остановит компиляцию кода).
Проблема заключается в понимании пользователем того, что возвращается в матчах (RecognizerIntent.EXTRA_RESULTS
). У этого массива нет ни одной записи для каждого слова, у нее есть одна запись для каждого соответствия, которое распознает распознаватель речи, для того, что, по вашему мнению, вы могли бы сказать.
например. если вы скажете "Я написал в Stack Overflow", массив может быть:
["I wrote on stack overflow",
"I boat a stack over flow",
"Ire oh ton stack over flow"]
Если вы хотите получить массив слов, я бы предложил взять первую строку соответствия и расщепить все пробелы.