Android开发之使用语音识别
在Anrroid4.0下一个新的功能就是直接语音输出汉字(虽然国产的山寨早就有了这个功能了~),即使不同的人在说话,也能很好的识别,并存在文本框中~如果你是一个开发人员,你也可以很方便的集集成这个语音输出~
为了更加简单的去实现,你如果下载一个库顺带修改下下输入法~Android2.2以后的版本中会一切都顺利的进行~在Android4.0中,用户语音输入时,使用的是标准的语音识别早期版本;不同的只是图解说明。实例图片如下:
他的布局很简单的时间,只包含一个按钮:一个麦克风。按麦克风、用户触发语音识别
下载库~然后添加到你的 IME APK.
下载链接:https://google-voice-typing-integration.googlecode.com/git/VoiceImeUtils/voiceimeutils.jar
先创建一个语音识别触发器
该库中包含了“VoiceRecognitionTrigger”帮助类。 创建一个InputMethodService # onCreate方法在你的输入法
public void onCreate() {
super.onCreate();
...
mVoiceRecognitionTrigger = new VoiceRecognitionTrigger(this);
}
麦克风图标添加到你的输入法
你需要修改你的UI输入法,并且添加一个麦克风图标,注册一个触发OnClickListener语音识别。麦克风图标会显示只有语音识别是安装;使用VoiceRecognitionTrigger#isInstalled().
public View onCreateInputView() { LayoutInflater inflater = (LayoutInflater) getSystemService( Service.LAYOUT_INFLATER_SERVICE); mView = inflater.inflate(R.layout.ime, null); ... mButton = (ImageButton) mView.findViewById(R.id.mic_button); if (mVoiceRecognitionTrigger.isInstalled()) { mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mVoiceRecognitionTrigger.startVoiceRecognition(); } }); mButton.setVisibility(View.VISIBLE); } else { mButton.setVisibility(View.GONE); } return mView; }
如果你的输入法支持多种语言,你可以指定语言识别应该做一个参数的startVoiceRecognition()。
输入法启动通知的触发
当你的输入法启动,你需要通知触发,所以它可以插入到文本观任何未解决的识别结果。
@Override public void onStartInputView(EditorInfo info, boolean restarting) { super.onStartInputView(info, restarting); if (mVoiceRecognitionTrigger != null) { mVoiceRecognitionTrigger.onStartInputView(); } }
修改你的Android显示
为了启动一个语音识别通过特定的API并显示。
<manifest ... > <application ...> ... <service android:name="com.google.android.voiceime.ServiceHelper" /> <activity android:name="com.google.android.voiceime.ActivityHelper" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:excludeFromRecents="true" android:windowSoftInputMode="stateAlwaysHidden" android:finishOnTaskLaunch="true" android:configChanges="keyboard|keyboardHidden|navigation |orientation"/> </application> </manifest>
动态更新麦克风图标
这一步是可选的,但你要实现它,如果可能的话,因为它会提高用户体验。语音识别需要的网络访问,如果没有网络,您应该通知用户,输入法语音识别目前禁用。要做到这一点,你需要注册VoiceRecognitionTrigger.Listener。决定启用/禁用麦克风。
@Override public void onCreate() { super.onCreate(); ... mVoiceRecognitionTrigger = new VoiceRecognitionTrigger(this); mVoiceRecognitionTrigger.register(new VoiceRecognitionTrigger.Listener() { @Override public void onVoiceImeEnabledStatusChange() { updateVoiceImeStatus(); } }); } ... @Override public void onDestroy() { ... if (mVoiceRecognitionTrigger != null) { mVoiceRecognitionTrigger.unregister(this); } super.onDestroy(); } private void updateVoiceImeStatus() { if (mVoiceRecognitionTrigger.isInstalled()) { mButton.setVisibility(View.VISIBLE); if (mVoiceRecognitionTrigger.isEnabled()) { mButton.setEnabled(true); } else { mButton.setEnabled(false); } } else { mButton.setVisibility(View.GONE); } mView.invalidate(); }
添加显示许可~
<manifest ... > ... <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ... </manifest>
语音识别很容易让用户做更多的与他们的Android 设备交互。
评论被关闭。