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