Android App与OK Google集成

时间:2015-06-07 02:52:16

标签: android speech-recognition google-now

有没有办法发出语音命令:

确定GOOGLE询问XXX某些应用特定问题或命令

让它推出" APP"使用公认的文本:"某些应用程序特定问题或命令"

我的应用程序将语音识别作为一项服务......但在使用我的APP时,我无法提出Google可以处理的问题......

3 个答案:

答案 0 :(得分:18)

通过Voice Actions API,您的应用可以注册system actions,其中一个是搜索' (所以你可以在APP'上搜索一些问题或命令。)

过去,一些开发人员能够submit a custom voice action request。获得批准后,用户可以通过语音对您的应用进行特定操作。这不再是一种选择。

答案 1 :(得分:10)

实际上非常简单,使用内置的语音操作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”字符串,则转到下一个世界并执行说明。例如,

“确定Google会说出当前时间”

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

为了使其看起来更智能,您可以实施后台服务并继续收听用户的语音输入。

PS:我不确定这是否是一种有效的方式,但这只是另一种做法。

答案 2 :(得分:5)

整合&#34;确定Google&#34;通过以下两个步骤,您的应用程序很容易。

首先我们需要在清单文件中声明

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

用户应按照语法检测&#34; Ok google&#34;,当用户说“好的Google,在应用名称上搜索词组时“,谷歌首先会检查是否安装了名为app name的应用程序,该应用程序已声明能够处理此类查询。