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

How to override voice input key on Android keyboard?

我创建了一个带有按钮的 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);

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

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);
}

因此 Activity 的工作方式如下:单击按钮,说话,然后会弹出一个对话框,列出最接近的匹配项,您可以 select 一个。

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

我需要的:

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

关于如何执行此操作的任何想法?

编辑:

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

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

不,您不能那样更改默认键盘的行为。没有 API 可以这样做,以覆盖单个键的作用。如果你想要这个,你需要在不使用键盘的情况下与语音交互以发送文本 API。这是 Android 内置的(假设 phone 下载了语音提供程序),API 允许语音提供程序 return 多个可能的结果。给定的语音提供者是否提供(请记住,用户和 OEM 可以将任何语音安装到他们想要的文本提供者)是您必须进行试验并找出答案的东西。