在Cupcake中,Android引入了对语音识别的支持。语音识别主要位于android.speech包中,主要的类包括SpeechRecognizer、RecognitionService、RecognizerIntent、RecognizerResultsIntent、RecognitionListener等类和接口。
SpeechRecognizer提供了接入语音识别服务的接口,下面是SpeechRecognizer的常用方法:
createSpeechRecognizer() //创建语音识别器
setRecognitionListener() //设置监听器
startListening() //开始语音识别
stopListening() //结束语音识别
语音识别要求"android.permission.RECORD_AUDIO"权限。
为了进行语音识别,首先需要发布一个语音识别的Activity,然后系统会启动语音识别引擎,并对用户的语音进行处理,处理的结果将会通过onActivityResult()方法被返回。下面是Android中的一个实现:
发起语音识别
private void startVoiceRecognitionActivity()
{
//语音识别的Action
Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
//设置附加信息
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
对语音识别结果的处理如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode==VOICE_RECOGNITION_REQUEST_CODE && resultCode==RESULT_OK)
{
ArrayList< String> matches=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
mList.setAdapter(new ArrayAdapter< String>(this,android.R.layout.simple_list_item_1,matches));
}
super.onActivityResult(requestCode, resultCode, data);
}
在目前的实现中,Android支持两种类型的Action:ACTION_RECOGNIZE_SPEECH和ACTION_WEB_SEARCH。考虑到可能没有处理对应的Action的应用,在代码的实现中需要捕获ActivityNotFoundException异常。
Action为ACTION_RECOGNIZE_SPEECH时,请求语音识别的附加信息为EXTRA_LANGUAGE_MODEL,可选附加信息为EXTRA_PROMPT、EXTRA_LANGUAGE、EXTRA_MAX_RESULTS、EXTRA_RESULTS_PENDINGINTENT、EXTRA_RESULTS_ PENDINGINTENT_BUNDLE,结果附加信息为EXTRA_RESULTS。
Action为ACTION_WEB_SEARCH时,请求语音识别的附加信息为EXTRA_ LANGUAGE_MODEL,可选附加信息为EXTRA_PROMPT、EXTRA_LANGUAGE、EXTRA_MAX_RESULTS,结果附加信息为EXTRA_RESULTS。