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 的应用程序,该应用程序声明自己能够处理此类查询。