我一直在网上搜索这方面的内容,但找不到解决方案。我想使用硬件按钮配件(蓝牙、nfc,甚至是简单的 1/8 英寸麦克风插孔)来执行相当于按下 GBoard 上的“麦克风图标”并开始语音听写的操作。
也就是说,假设我们在一个突出显示文本输入字段的应用程序中。用户按下硬件按钮,GBoard 将开始收听听写,就好像用户点击了麦克风图标一样。
有任何想法吗?那里有很多按钮解决方案,包括 Android 的内置辅助功能开关功能,但我无法想出将按钮按下专门映射到“开始语音识别”软件按钮的方法。
我一直在网上搜索这方面的内容,但找不到解决方案。我想使用硬件按钮配件(蓝牙、nfc,甚至是简单的 1/8 英寸麦克风插孔)来执行相当于按下 GBoard 上的“麦克风图标”并开始语音听写的操作。
也就是说,假设我们在一个突出显示文本输入字段的应用程序中。用户按下硬件按钮,GBoard 将开始收听听写,就好像用户点击了麦克风图标一样。
有任何想法吗?那里有很多按钮解决方案,包括 Android 的内置辅助功能开关功能,但我无法想出将按钮按下专门映射到“开始语音识别”软件按钮的方法。
此按钮用于在媒体会话期间使用 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);
}
}
}
}