Android 轻松实现语音识别的完整代码 (转)
苹果的iphone有语音识别用的是Google的技术,做为Google力推的Android自然会将其核心技术往Android系统里面植入,并结合google的云端技术将其发扬光大。
所以GoogleVoiceRecognition在Android的实现就变得极其轻松。
语音识别,借助于云端技术可以识别用户的语音输入,包括语音控制等技术,下面我们将利用Google提供的Api实现这一功能。
功能点为:通过用户语音将用户输入的语音识别出来,并打印在列表上。
功能界面如下:
用户通过点击speak按钮显示界面:
用户说完话后,将提交到云端搜索:
在云端搜索完成后,返回打印数据:
*Copyright(C)2008TheAndroidOpenSourceProject
*
*LicensedundertheApacheLicense,Version2.0(the"License");
*youmaynotusethisfileexceptincompliancewiththeLicense.
*YoumayobtainacopyoftheLicenseat
*
*http://www.apache.org/licenses/LICENSE-2.0
*
*Unlessrequiredbyapplicablelaworagreedtoinwriting,software
*distributedundertheLicenseisdistributedonan"ASIS"BASIS,
*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
*SeetheLicenseforthespecificlanguagegoverningpermissionsand
*limitationsundertheLicense.
*/
packagecom.example.android.apis.app;
importcom.example.android.apis.R;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.content.pm.PackageManager;
importandroid.content.pm.ResolveInfo;
importandroid.os.Bundle;
importandroid.speech.RecognizerIntent;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.ArrayAdapter;
importandroid.widget.Button;
importandroid.widget.ListView;
importjava.util.ArrayList;
importjava.util.List;
/**
*SamplecodethatinvokesthespeechrecognitionintentAPI.
*/
publicclassVoiceRecognitionextendsActivityimplementsOnClickListener{
privatestaticfinalintVOICE_RECOGNITION_REQUEST_CODE=1234;
privateListViewmList;
/**
*Calledwiththeactivityisfirstcreated.
*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//InflateourUIfromitsXMLlayoutdescription.
setContentView(R.layout.voice_recognition);
//Getdisplayitemsforlaterinteraction
ButtonspeakButton=(Button)findViewById(R.id.btn_speak);
mList=(ListView)findViewById(R.id.list);
//Checktoseeifarecognitionactivityispresent
PackageManagerpm=getPackageManager();
Listactivities=pm.queryIntentActivities(
newIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH),0);
if(activities.size()!=0){
speakButton.setOnClickListener(this);
}else{
speakButton.setEnabled(false);
speakButton.setText("Recognizernotpresent");
}
}
/**
*Handletheclickonthestartrecognitionbutton.
*/
publicvoidonClick(Viewv){
if(v.getId()==R.id.btn_speak){
startVoiceRecognitionActivity();
}
}
/**
*Fireanintenttostartthespeechrecognitionactivity.
*/
privatevoidstartVoiceRecognitionActivity(){
Intentintent=newIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Speechrecognitiondemo");
startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);
}
/**
*Handletheresultsfromtherecognitionactivity.
*/
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
if(requestCode==VOICE_RECOGNITION_REQUEST_CODE&&resultCode==RESULT_OK){
//Fillthelistviewwiththestringstherecognizerthoughtitcouldhaveheard
ArrayListmatches=data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
mList.setAdapter(newArrayAdapter(this,android.R.layout.simple_list_item_1,
matches));
}
super.onActivityResult(requestCode,resultCode,data);
}
}