Android-手动输入电视语音识别

Android-TV speech recognition with manual input

我使用以下小代码在我的 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);
}

一切正常,我得到了结果以供进一步处理。

问题是我还想让用户可以使用虚拟键盘手动输入搜索字符串。 在 Google 自己的应用程序中,您只需在按下语音搜索图标后按下遥控器上的 RIGHT 即可将焦点置于文本框上。

在我上面的示例中,当我按下搜索图标时,我可以看到 "built-in-textbox",但如果我尝试导航到它,搜索就会中断并关闭。

如何访问搜索文本框?这应该会取消语音输入并调出键盘,就像 Play 商店应用一样。

您是否在 Android 电视应用程序设计中使用 Leanback 支持库? 我猜 "Google Play Store app" 和 "YouTube app" 正在使用 BrowseFragment 和 SearchFragment 进行搜索。这些片段提供内置搜索 UI。

实现见Google's sample source code or SearchFragment – Android TV app Tutorial 12