0

我一直在网上搜索这方面的内容,但找不到解决方案。我想使用硬件按钮配件(蓝牙、nfc,甚至是简单的 1/8 英寸麦克风插孔)来执行相当于按下 GBoard 上的“麦克风图标”并开始语音听写的操作。

也就是说,假设我们在一个突出显示文本输入字段的应用程序中。用户按下硬件按钮,GBoard 将开始收听听写,就好像用户点击了麦克风图标一样。

有任何想法吗?那里有很多按钮解决方案,包括 Android 的内置辅助功能开关功能,但我无法想出将按钮按下专门映射到“开始语音识别”软件按钮的方法。

4

1 回答 1

0

此按钮用于在媒体会话期间使用 mediaplayer 控制播放或控制电话通话。这个点击被android os拦截。因此,您拦截此过程的方法是创建虚拟媒体会话并使用 MediaButtonReceiver 处理硬件按钮点击。尽管如此,任何应用程序(例如,运行 YouTube 或 Google Play 音乐)都可能会窃取您的媒体按钮焦点。

编辑:开始语音识别

public Intent getRecognizeIntent(String promptToUse, int maxResultsToReturn)
{
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, maxResultsToReturn);
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, promptToUse);
    return intent;
}

startActivityForResult(recognizeIntent, SpeechGatherer.VOICE_RECOGNITION_REQUEST_CODE);

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    Log.d("Speech", "GOT SPEECH RESULT " + resultCode + " req: "
        + requestCode);
    if (requestCode == SpeechGatherer.VOICE_RECOGNITION_REQUEST_CODE)
    {
        if (resultCode == RESULT_OK)
        {
            ArrayList<String> matches = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
            Log.d(D_LOG, "matches: ");
            for (String match : matches)
            {
                Log.d(D_LOG, match);
            }
        }
    }
}
于 2019-09-17T20:11:11.717 回答