人工输入的Android电视语音识别

人工输入的Android电视语音识别,android,speech-recognition,voice-recognition,android-tv,Android,Speech Recognition,Voice Recognition,Android Tv,我已经用下面的小代码在我的Android电视应用程序上实现了语音搜索 private void displaySpeechRecognizer() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MOD

我已经用下面的小代码在我的Android电视应用程序上实现了语音搜索

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);
}
private void displaySpeechRecognizer(){
意向意向=新意向(识别意向、行动、识别言语);
intent.putExtra(识别器intent.EXTRA_语言_模型,
识别者意图、语言、模型、自由形式);
startActivityForResult(意图、言语请求代码);
}
@凌驾
在ActivityResult(int请求代码、int结果代码、,
意图(数据){
if(requestCode==SPEECH\u REQUEST\u CODE&&resultCode==1){
列表结果=data.getStringArrayListExtra(
识别者意图。额外结果);
字符串spokenText=results.get(0);
Toast.makeText(getActivity(),spokenText,Toast.LENGTH_LONG).show();
}
super.onActivityResult(请求代码、结果代码、数据);
}
这一切都很好,我得到了进一步处理的结果回来

问题是,我还想让用户能够使用虚拟键盘手动输入搜索字符串。 在谷歌自己的应用程序中,你只需在按下语音搜索图标后按遥控器上的右键,即可将焦点对准文本框

在我上面的例子中,当我按下搜索图标时,我可以看到“内置文本框”,但如果我尝试导航到它,搜索就会中断并关闭


如何访问搜索文本框?这将取消语音输入并打开键盘,就像Play Store应用程序一样。

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


有关实现,请参阅或。

感谢您提供的链接,这些链接至少在某种程度上使它起到了作用。第一次搜索工作正常,但在第二次尝试(不留下searchfragment)时,onQueryTextSubmit似乎没有启动,我仍然保留第一次搜索的结果。您的searchfragment实现了SearchResultProvider接口?首先,您可以通过插入Logcat日志来检查onQueryTextChange&onQueryTextSubmit回调是否工作。是的,它实现了SearchResultProvider。经过一些调试,我发现onquerytexsubmit只在您第一次按下虚拟键盘上的搜索按钮时被调用。从同一searchfragment中再次搜索只会触发onQueryTextChange。谷歌自己的示例代码中也有同样的结果,所以这可能是出于设计。当我测试Google的例子时,当我按下软件键盘上的“搜索”按钮时,onQueryTextSubmit工作正常。测试设备为软件版本5.1.1(API级别22)。