与Google合并的Android应用程序

有没有办法发出一个像这样的语音命令:

OK GOOGLE问XXX某些应用程序特定问题或命令

并且使用“APP的特定问题或命令”识别文本启动“APP”

我的应用程序有语音识别作为服务…但是当使用我的APP时,我不能提出问题,谷歌可以处理…

Solutions Collecting From Web of "与Google合并的Android应用程序"

通过语音操作API ,您的应用程序可以注册系统操作 ,其中一个是“search”(所以您可以在APP上search某个问题或命令)。

过去,一些开发者能够提交自定义语音操作请求 。 经批准后,用户可以通过语音与您的应用程序进行特定的操作。 这不再是一个选项。

这其实很简单,使用内置的语音操作API,您可以在线和离线模式下进行操作。 这里给你一个简短的演示,

首先提示用户input一些声音,

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

这将带来内置的谷歌语音input屏幕,将采取语音input。 现在,在语音input后,检查结果并将语音转换为转换后的string,

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

现在,您可以以任何您想要的方式来操作string,或将它们与预定义的操作string进行比较,以执行特定的操作等等。

更新:

为了让应用程序在说出特定命令(例如“OK Google”)之后继续工作 ,只需定义一个名为“OK Google”的静态string,并将每个语音input与此预定义的string进行比较。 如果匹配“OK Google”string,则转到下一个世界并执行说明。 例如,

“确定Google说当前时间”

在这里,您可以比较前两个单词“OK Google”,如果这匹配您预定义的string移动到“说当前时间”的下一个单词。 为此,您可以保存一组包含您的命令的数组,例如“说出当前时间”将说出时间。

为了使它看起来更加智能,您可以实施后台服务,并不断收听用户的语音input。

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> /> 

现在我们需要在Activity onCreate中声明

  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,search应用程序名称上的短语 ”时,Google会首先检查是否有一个名为app name的应用程序已经声明自己能够处理这样的查询。