23

有没有办法发出类似的语音命令:

OK GOOGLE ASK XXX 一些应用特定的问题或命令

并让它启动带有识别文本的“APP”:“Some App Specific Question or Command”

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

4

3 回答 3

18

通过Voice Actions API,您的应用可以注册系统操作,其中之一是“搜索”(因此您可以“在 APP 上搜索一些问题或命令”)。

过去,一些开发人员能够提交自定义语音操作请求。获得批准后,用户可以通过语音对您的应用执行特定操作。这不再是一种选择。

于 2015-06-07T03:39:20.957 回答
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”字符串匹配,则移动到下一个世界并执行指令。例如,

“OK Google 说出当前时间”

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

为了让它看起来更智能,您可以实现一个后台服务并不断听取用户的语音输入。

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

于 2015-06-07T04:22:22.793 回答
5

只需以下两个步骤,即可轻松将“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 for phrase on app name ”时,Google 首先检查是否安装了一个名为 app name 的应用程序,该应用程序已声明自己能够处理此类查询。

于 2016-11-08T10:04:24.067 回答