如何覆盖Android键盘上的语音输入键?

时间:2015-06-18 07:24:33

标签: android android-softkeyboard voice-recognition

我创建了一个带有按钮的Activity,点击该按钮后,启动Intent以启动语音输入,如下所示:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak Now");
startActivityForResult(intent, SPEECH_REQUEST_CODE);

然后,我得到结果并在对话框中显示它们,以便用户可以选择最接近的匹配。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK && data != null) {
        final ArrayList<String> list_voice_input = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
        // I use this ArrayList to create a dialog.
    }
    super.onActivityResult(requestCode, resultCode, data);
}

所以活动的工作原理如下:单击按钮,说出,然后会弹出一个对话框,列出最接近的匹配项,您可以选择一个。

我使用了一个按钮点击来实现这一点。但Android的键盘已经内置了语音输入。当我用它说话时,它会输出我说的内容,自动检测最接近的匹配。

我需要什么:

我希望使用默认键盘而不是按钮,检测用户何时选择说话而不是键入(在文本字段中),并显示最接近匹配的对话框。

关于我如何做到这一点的任何想法?

修改

我的问题被标记为重复,但我并没有试图摆脱录制语音时出现的弹出式对话框。我的问题不同。

当您键入文本时,在Android键盘中,已经内置了语音输入选项。你可以用它来说文字。所以,我的问题是,我可以在对话框中向用户显示最接近的匹配列表,并让他们选择一个匹配,而不是自动打印出最接近的匹配吗?

1 个答案:

答案 0 :(得分:2)

不,你不能像这样改变默认键盘的行为。没有API可以这样做,以覆盖单个键所做的事情。如果你想要这个,你需要自己与语音到文本API进行交互,而无需使用键盘。这是内置于Android(假设手机已下载语音提供程序),API允许语音提供程序返回多个可能的结果。无论给定的语音提供商是否做到(记住用户和OEM可以将任何语音安装到他们想要的文本提供者),您都需要进行实验和发现。