如何在我的应用程序中实施Google语音输入?

时间:2015-02-09 15:50:33

标签: java android

我正在尝试在我的应用程序中添加一个启动Google Voice Typing(或默认语音识别)的按钮。我试过跟this tutorial。本教程让我感到非常困惑。我导入了.jar,并为我的Manifest添加了必要的权限,服务和活动。但我似乎无法弄清楚如何“把它们放在一起”。我想知道:

  1. 我应该在我的主要活动中点击我的按钮来调用inputMethodService吗?或者我的inputMethodService本质上是否成为我的主要活动?
  2. IME是什么意思?我尝试谷歌它,但它给我的定义并没有帮助我的理解。
  3. 当我尝试将整个DemoInputMethodService代码复制并粘贴到当前活动中时,我收到一条错误消息,指出我无法在此活动中扩展InputMethodService。 (这导致回答问题一。)
  4. 我怎样才能让它发挥作用?

4 个答案:

答案 0 :(得分:4)

如果您想要按照您提到的教程进行操作,那么首先需要实现IME(输入法编辑器),请参阅http://developer.android.com/guide/topics/text/creating-input-method.html

此IME可以具有常规的键盘外观或仅包含麦克风按钮。

您应用的用户首先必须点击文字字段才能启动IME。 (请注意,设备上可能安装了多个IME,并且必须在“设置”中明确启用它们。)然后,用户必须单击麦克风按钮才能触发语音识别。

本教程提供了一个jar,可让您直接调用Google的识别器。如果您通过SpeechRecognizer界面(http://developer.android.com/reference/android/speech/SpeechRecognizer.html)调用识别器,那将更好,这样用户就可以决定是使用Google还是其他东西。

SpeechRecognizer被赋予一个支持方法onPartialResults的监听器,它允许您在用户说话时监控识别假设。这取决于你如何展示它们。但请注意,SpeechRecognizer的规范并未承诺调用此方法。这取决于识别器服务的实现。关于谷歌的实施:它支持的内容不断更改,它没有公共API,甚至没有发行说明。

您可以重用我的项目Kõnele(http://kaljurand.github.io/K6nele/about/),其中包含两个SpeechRecognizer实现和一个使用它们的IME。其中一个实现使用Kaldi GStreamer服务器(https://github.com/alumae/kaldi-gstreamer-server)提供对任意长音频输入的连续识别。您需要设置自己的服务器实例,将其移植到您要识别的语言(除非您想使用Kõnele默认使用的爱沙尼亚服务器)。

答案 1 :(得分:0)

在您拥有Android SDK的地方找到语音识别示例..

示例:

$ find $SDK_ROOT/samples -name *recogni*


./android-19/legacy/VoiceRecognitionService/res/xml/recognizer.xml
./android-19/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice
./android-19/legacy/ApiDemos/res/layout/voice_recognition.xml
./android-18/legacy/VoiceRecognitionService/res/xml/recognizer.xml
./android-18/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice
./android-18/legacy/ApiDemos/res/layout/voice_recognition.xml
./android-21/legacy/VoiceRecognitionService/res/xml/recognizer.xml
./android-21/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice
./android-21/legacy/ApiDemos/res/layout/voice_recognition.xml

任何一项服务都应该有助于展示如何进行RecognizerIntent

“APIDemo”似乎包括使用RecognizerIntent。检查那个来源。否则,请查看服务并将其划分为意图。

答案 2 :(得分:0)

我遇到了同样的问题,但经过很长一段时间寻找活动的连续语音听写,我使用pocketsphinx解决了这个问题。

我无法找到将Google语音打字功能集成到某个活动上的方法,只需按照tutorial的输入法进行操作即可。如果它让您感到困惑,只需下载此demo并进行修改即可。 祝你好运!

答案 3 :(得分:0)

您可以从按钮侦听器触发意图

Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

结果可以从

获得
private TextToSpeech mTts;
protected void onActivityResult(
        int requestCode, int resultCode, Intent data) {
    if (requestCode == MY_DATA_CHECK_CODE) {
        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
            // success, create the TTS instance
            mTts = new TextToSpeech(this, this);
        } else {
            // missing data, install it
            Intent installIntent = new Intent();
            installIntent.setAction(
                TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
        }
    }
}

有关详细信息,请参阅this链接。