Как правильно запустить действие распознавания голоса из действия в режиме запуска singleInstance?
Уже видел другой поток, который упоминает, что действие с RecognizerIntent не работает правильно, если запущен изнутри действия с режимом запуска singleInstance. Поэтому я хотел бы знать, каковы мои альтернативы.
Мой пример использования следующий: мое приложение прослушивает событие, и когда это событие происходит, оно отображает диалоговое окно с предупреждением, даже если пользователь находится в процессе использования другого приложения. Из других вопросов я обнаружил, что обычный способ сделать это - запустить действие в режиме запуска singleInstance. Но теперь, когда появляется это диалоговое окно с предупреждением, мне нужно использовать RecognizerIntent и выполнить некоторую речь для обработки текста. Однако диалог речевого ввода просто не ждет ввода, и onActivityResult() вызывается немедленно. Все работает хорошо, если мое диалоговое окно с предупреждением появляется из действия, которое имеет режим запуска, отличный от "singleInstance".
Есть ли другие способы решения этой проблемы?
1 ответ
Попробуйте запустить свой код следующим образом:-
List<ResolveInfo> activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) {
speakButton.setOnClickListener(this);
} else {
speakButton.setEnabled(false);
speakButton.setText("Recognizer not present");
}
Выше код должен быть написан внутри onCreate(), а ниже должен быть написан за его пределами
public void onClick(View v) {
if (v.getId() == R.id.btn_speak) {
startVoiceRecognitionActivity();
}
}
private void startVoiceRecognitionActivity() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
//Run a loop checking whether the list is empty or not:-
while(activities.isEmpty()){
//wait
}
//Now run your alert dialog box
}
Я протестировал его на DellXCD35 android 2.3.3, и он прекрасно работает, когда вы получаете список текстов в своем списке и просматриваете его, который хотите выбрать.