【问题标题】:Android App Integrated with OK Google与 OK Google 集成的 Android 应用
【发布时间】:2015-08-21 18:23:18
【问题描述】:

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

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

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

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

【问题讨论】:

  • 语音识别即服务是否会缩短电池寿命?你能解释一下那个场景吗?

标签: android speech-recognition google-now


【解决方案1】:

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

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

【讨论】:

  • 太棒了……我以前没见过这个API……这看起来是我需要的。
  • 我应该在不久前发表评论...我确实提交了自定义语音请求...从未收到任何反馈。
  • 我一直在寻找这个很长时间 - 你知道我怎样才能在屏幕关闭时继续语音识别,就像现在的谷歌一样?非常感谢!
  • @RuchirBaronia - 我真的,真的鼓励您提出自己的问题,而不是评论不同问题的现有答案。
  • 感谢您的回复!我认为我还没有足够的代码来实际提出我自己的问题,而且我相信它会立即关闭。如果我有一个将永远运行的持续服务(并在启动时启动)并且我想不断地监听某些语音输入(并在我收到该输入时执行一些代码),你认为我应该从哪里开始?类似于“OK - Google”的工作方式,即使在屏幕关闭时也是如此。任何信息都非常有帮助,非常感谢您的帮助!
【解决方案2】:

这实际上非常简单,使用内置的语音操作 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”,如果它与您的预定义字符串匹配,则移动到下一个词,即“说出当前时间” .为此,您可以保存一组包含您的命令的数组,例如 “说出当前时间” 将说出时间。

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

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

【讨论】:

  • 虽然这适用于根据您的应用程序请求接收语音输入,但最初的问题是让“OK google”触发应用程序打开,但这并没有
  • 如果我没记错的话,“OK Google”只是 Google 用来识别命令的预定义文本。这可以通过定义一个名为“OK Google”的静态字符串并将其与用户的语音输入进行比较来轻松完成。它匹配的字符串我们可以比较下一条指令。为了让它更有趣,我们可以在后台服务中实现它,以便它在后台继续监听用户。如果我的想法有任何问题,请纠正我。 @ianhanniballake
  • 当然,您的答案依赖于存在的活动并且不进行任何实时处理,因此使用它来触发您通过 Google 应用程序的@获得的系统范围的“ok google”样式检测987654321@ 根本不合适,您的代码也不能用作后台服务。再一次,不是一个糟糕的答案 - 只是不是对所提出问题的答案。
  • 我一直在寻找这个很长时间 - 你知道我如何在屏幕关闭时继续语音识别,就像现在的谷歌一样?非常感谢!
  • @RuchirBaronia 你有没有找到任何解决方案......即使我想实现这个功能。
【解决方案3】:

只需以下两个步骤即可轻松将“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 的应用,它已声明自己能够处理此类查询。

【讨论】:

  • 你还需要把你的应用发布到google play store,否则google now将无法识别“应用名称”,看这个人的经验,在“我应该注意什么?” blog.prolificinteractive.com/2015/11/06/…
  • @AnthonyDahanne,我已经在 alpha 测试中发布了我的应用程序,但它不适用于许多设备。是否还需要从 Playstore 下载才能使用?
猜你喜欢
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多