这实际上非常简单,使用内置的语音操作 API,您可以在在线和离线模式下执行此操作。这里有一个简短的演示,
首先提示用户输入一些语音,
private void promptSpeechInput() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
getString(R.string.speech_prompt));
try {
startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
} catch (ActivityNotFoundException a) {
Toast.makeText(getApplicationContext(),
getString(R.string.speech_not_supported),
Toast.LENGTH_SHORT).show();
}
}
这将调出内置的 Google 语音输入屏幕并接受语音输入。现在在语音输入后检查结果并将语音转换为字符串,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQ_CODE_SPEECH_INPUT: {
if (resultCode == RESULT_OK && null != data) {
ArrayList<String> result = data
.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
// here the string converted from your voice
String converted_text = (result.get(0);
}
break;
}
}
}
现在您可以以任何您想要的方式操作字符串,或者将它们与预定义的操作字符串进行比较以执行特定操作等等......
更新:
在说出特定命令后让应用程序运行,例如“OK Google”,只需定义一个名为“OK Google”的静态字符串,并将每个语音输入与这个预定义的字符串进行比较。如果这与 "OK Google" 字符串匹配,则移动到下一个世界并执行指令。例如,
“OK Google 说出当前时间”
在这里您可以比较前两个词“OK Google”,如果它与您的预定义字符串匹配,则移动到下一个词,即“说出当前时间” .为此,您可以保存一组包含您的命令的数组,例如 “说出当前时间” 将说出时间。
为了让它看起来更智能,您可以实现一个后台服务并不断听取用户的语音输入。
PS:我不确定这是否是一种有效的方法,但这只是另一种方法。