Android 与 OK 集成的应用 Google
Android App Integrated with OK Google
有没有办法发出类似这样的语音命令:
好的 GOOGLE 询问 XXX 一些特定于应用程序的问题或命令
并让它启动 "APP" 并识别文本:"Some App Specific Question or Command"
我的应用程序具有语音识别服务...但是在使用我的应用程序时我无法提出 OK Google 可以处理的问题...
通过Voice Actions API, your app can register for system actions,其中之一是'search'(所以你可以'search for Some Question or command on APP')。
过去,一些开发人员能够submit a custom voice action request。获得批准后,用户可以通过语音对您的应用执行特定操作。这不再是一个选项。
这实际上非常简单,使用内置的 语音操作 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 speak the the current time"
在这里您可以比较前两个词 "OK Google" 如果匹配您的预定义字符串移动到下一个词 "speak the current time"。为此,您可以保存一组包含您的命令的数组,例如 "speak the current time" 会说出时间。
为了使它看起来更智能,您可以实施后台服务并持续收听用户的语音输入。
PS:我不确定这是否是一种有效的方法,但这只是另一种方法。
要将 "OK Google" 集成到您的应用中很容易,只需执行以下两个步骤。
首先我们需要在清单文件中声明
<activity..
<intent-filter>
<action android:name="com.google.android.gms.actions.SEARCH_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
/>
现在我们需要在ActivityonCreate
中声明
if (getIntent().getAction() != null && getIntent().getAction().equals("com.google.android.gms.actions.SEARCH_ACTION")) {
query = getIntent().getStringExtra(SearchManager.QUERY);
Log.e("Query:",query); //query is the search word
}
用户应遵循 "Ok google" 检测的语法,当用户说“OK Google”时,在 [=20= 上搜索 phrase ]app name”,Google 首先检查是否安装了一个名为 app name 的应用程序,该应用程序声明自己能够处理此类查询。
有没有办法发出类似这样的语音命令:
好的 GOOGLE 询问 XXX 一些特定于应用程序的问题或命令
并让它启动 "APP" 并识别文本:"Some App Specific Question or Command"
我的应用程序具有语音识别服务...但是在使用我的应用程序时我无法提出 OK Google 可以处理的问题...
通过Voice Actions API, your app can register for system actions,其中之一是'search'(所以你可以'search for Some Question or command on APP')。
过去,一些开发人员能够submit a custom voice action request。获得批准后,用户可以通过语音对您的应用执行特定操作。这不再是一个选项。
这实际上非常简单,使用内置的 语音操作 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 speak the the current time"
在这里您可以比较前两个词 "OK Google" 如果匹配您的预定义字符串移动到下一个词 "speak the current time"。为此,您可以保存一组包含您的命令的数组,例如 "speak the current time" 会说出时间。
为了使它看起来更智能,您可以实施后台服务并持续收听用户的语音输入。
PS:我不确定这是否是一种有效的方法,但这只是另一种方法。
要将 "OK Google" 集成到您的应用中很容易,只需执行以下两个步骤。
首先我们需要在清单文件中声明
<activity..
<intent-filter>
<action android:name="com.google.android.gms.actions.SEARCH_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
/>
现在我们需要在ActivityonCreate
中声明 if (getIntent().getAction() != null && getIntent().getAction().equals("com.google.android.gms.actions.SEARCH_ACTION")) {
query = getIntent().getStringExtra(SearchManager.QUERY);
Log.e("Query:",query); //query is the search word
}
用户应遵循 "Ok google" 检测的语法,当用户说“OK Google”时,在 [=20= 上搜索 phrase ]app name”,Google 首先检查是否安装了一个名为 app name 的应用程序,该应用程序声明自己能够处理此类查询。