语音识别方法三:使用 Service 调用语音识别程序

1. 说明
以下例程功能为:在应用程序中使用通于访问 service 调用语言识别功能,录音并识别后将识别的字串通过 Listener

返回给应用程序。注意:使用前需要安装语音识别服务,如编译安装源码中的 development/samples/VoiceRecogitionService

2. 本例参考自 android 源码

  1. 后台服务
    参见 development/samples/VoiceRecognitionService/*
    此处实现了一个模拟的后台服务,它并未实现真的语音识别,而只是一个框架以示例,编译并安装它,即可在设置的语音输入与输出中看到它

,它包含了一个设置界面,当连接这个 Service 时,如果设置了 Letters,则直接返回 abc,

如果设置了 Numbers,则直接返回 123
你可以自己实现,用于连接 android 源码自带的识别引擎 srec.

  1. 前台程序
    参见 frameworks/base/core/java/android/speech/Recognition*
    它 与后台 Service 交互,此段代码实现在应用程序界面中

3. 可从此处下载可独立运行的代码 (前台程序): [http://download.csdn.net/source/2591401

](http://download.csdn.net/source/2591401)

4. 核心代码及说明

_ package com.android.mystt3; _

_ _

_ import android.app.Activity; _

_ import android.content.Intent; _

_ import android.os.Bundle; _

_ import android.view.View; _

_ import android.view.View.OnClickListener; _

_ import android.speech.RecognitionListener; _

_ import android.speech.RecognizerIntent; _

_ import android.speech.SpeechRecognizer; _

_ import android.widget.Button; _

_ import android.widget.TextView; _

_ import java.util.ArrayList; _

_ import android.util.Log; _

_ _

_ public class MyStt3Activity extends Activity implements OnClickListener { _

_ private TextView mText; _

_ private SpeechRecognizer sr; _

_ private static final String TAG = "MyStt3Activity"; _

_ _

_ @Override _

_ public void onCreate(Bundle savedInstanceState) { _

_ super.onCreate(savedInstanceState); _

_ setContentView(R.layout.main); _

_ Button speakButton = (Button) findViewById(R.id.btn_speak); // _ _ 识别按钮 _

__

_ mText = (TextView) findViewById(R.id.text); // _ _ 显示识别字串 _ __

_ speakButton.setOnClickListener(this); _

_ sr = SpeechRecognizer.createSpeechRecognizer(this); // _ _ 初始化识别工具,得到句柄 _

__

_ sr.setRecognitionListener(new listener()); // _ _ 注册回调类及函数 _ __

_ } _

_ _

_ class listener implements RecognitionListener // _ _ 回调类的实现 _ __

_ { _

_ public void onReadyForSpeech(Bundle params) _

_ { _

_ Log.d(TAG, "onReadyForSpeech"); _

_ } _

_ public void onBeginningOfSpeech() _

_ { _

_ Log.d(TAG, "onBeginningOfSpeech"); _

_ } _

_ public void onRmsChanged(float rmsdB) _

_ { _

_ Log.d(TAG, "onRmsChanged"); _

_ } _

_ public void onBufferReceived(byte[] buffer) _

_ { _

_ Log.d(TAG, "onBufferReceived"); _

_ } _

_ public void onEndOfSpeech() _

_ { _

_ Log.d(TAG, "onEndofSpeech"); _

_ } _

_ public void onError(int error) _

_ _ _ { _

_ Log.d(TAG, "error " + error); _

_ _ _ mText.setText("error " + error); _

_ } _

_ public void onResults(Bundle results) // _ _ 返回识别到的数据 _ __

_ { _

_ String str = new String(); _

_ Log.d(TAG, "onResults " + results); _

_ ArrayList data =

results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); _

_ for (int i = 0; i < data.size(); i++) _

_ { _

_ Log.d(TAG, "result " + data.get(i)); _

_ str += data.get(i); _

_ } _

_ mText.setText(str); // _ _ 显示被识别的数据 _ __

_ } _

_ public void onPartialResults(Bundle partialResults) _

_ { _

_ Log.d(TAG, "onPartialResults"); _

_ } _

_ public void onEvent(int eventType, Bundle params) _

_ { _

_ Log.d(TAG, "onEvent " + eventType); _

_ } _

_ } _

_ _

_ public void onClick(View v) { _

_ if (v.getId() == R.id.btn_speak) { _

_ sr.startListening(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)); _

_ } _

_ } _

_ } _

_ _

_ (转载请注明出处: http://xy0811.spaces.live.com/

) _

_ _