Я реализация голосового поиска на моем Android-TV приложении, используя следующий небольшой кодAndroid-TV распознавание речи с ручным вводом
private void displaySpeechRecognizer() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
startActivityForResult(intent, SPEECH_REQUEST_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == SPEECH_REQUEST_CODE && resultCode == -1) {
List<String> results = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
String spokenText = results.get(0);
Toast.makeText(getActivity(), spokenText, Toast.LENGTH_LONG).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
Это все работает хорошо, и я получаю результат обратно для дальнейшей обработки ,
Проблема в том, что я также хочу дать пользователю возможность ввести строку поиска вручную с помощью виртуальной клавиатуры. В своих приложениях Googles вы просто нажимаете RIGHT на пульте дистанционного управления, чтобы придать фокус текстовому полю после нажатия на значок голосового поиска.
В моем примере выше я вижу «встроенный текстовый блок», когда я нажимаю значок поиска, но если я попытаюсь перейти к нему, поиск прерывается и закрывается.
Как получить доступ к текстовому поле поиска? Это должно отменить голосовой ввод и вызвать клавиатуру вместо этого, как и приложение Play Store.
Спасибо за ссылки, те получили его работу, по крайней мере, в некоторой степени. Первый поиск работает нормально, но во второй попытке (не выходя из поискового фрагмента), то onQueryTextSubmit, похоже, не срабатывает, я по-прежнему остаюсь с результатами первого поиска. –
Ваш поискFragment реализует интерфейс SearchResultProvider? Сначала вы можете проверить onQueryTextChange & onQueryTextSubmit обратный вызов работает или нет, вставив журнал Logcat. – corochann
Да, он реализует SearchResultProvider. После некоторой отладки я обнаружил, что onQueryTextSubmit вызывается только в первый раз, когда вы нажимаете кнопку поиска на виртуальной клавиатуре. При повторном поиске из одного и того же поискового фрагмента только триггеры onQueryTextChange. Тот же результат в собственном примере кода Google, поэтому это может быть по дизайну. Я закончил реализацию onQueryTextChange с задержкой, чтобы обойти его. –