Android 开发系统自带语音模块应用
需求:项目中需要添加语音搜索模块,增加用户体验
解决过程:在网上搜到语音搜索例子,参考网上代码,加入到了自己的项目,完成产品要求。这个问题很好解决,网上能找到很多的资料,但是没有直接导入工程就能用的例子,我这里写了一个完整的Demo,代码可以直接粘贴到自己项目中去,实现了
语音搜索,并将搜索结果展示。
语音搜索大致流程:启动系统自带的Intent,Intent参数设置为RecognizerIntent.ACTION_RECOGNIZE_SPEECH,再加上一些提示参数
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"请开始说话");
当完成语音搜索之后在onActivityResult里进行数据接收,我这里只是展示了语音搜索的第一个结果,系统提供的结果有很多,是根据相似度排列的。我在Demo里使用了handler,在handler里把数据展示了出来。项目中这种情况下,对数据的一些处理都是在handler中进行。开发的过程中遇到一些语音搜索崩溃的现象,最后发现在结果展示的时候不要做一些费时的操作。
代码如下
publicclassMainActivityextendsActivity{
privateButtonbtnVoice;
privateTextViewtvVoiceResult;
privatestaticfinalintVOICE_RECOGNITION_REQUEST_CODE=123456;
privateHandlerjumpHandler=newHandler(){
publicvoidhandleMessage(android.os.Messagemsg){
tvVoiceResult.setText((String)msg.obj);
};
};
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnVoice=(Button)findViewById(R.id.btnVoice);
tvVoiceResult=(TextView)findViewById(R.id.tvVoiceResult);
btnVoice.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
try{
Intentintent=newIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"请开始说话");
startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);
}catch(ActivityNotFoundExceptione){
AlertDialog.Builderbuilder=newAlertDialog.Builder(MainActivity.this);
builder.setTitle("语音识别");
builder.setMessage("您的手机暂不支持语音搜索功能,点击确定下载安装Google语音搜索软件。您也可以在各应用商店搜索“语音搜索”进行下载安装。");
builder.setPositiveButton("确定",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//跳转到下载语音网页
}
});
builder.setNegativeButton("取消",null);
builder.show();
}
}
});
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
getMenuInflater().inflate(R.menu.activity_main,menu);
returntrue;
}
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==VOICE_RECOGNITION_REQUEST_CODE&&resultCode==MainActivity.RESULT_OK){
ArrayList<String>matches=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
if(matches.size()>0){
Messagemsg=newMessage();
msg.obj=matches.get(0);
jumpHandler.sendMessage(msg);
}
}
}
}
以上就是对Android语音模块开发的一个小实例,有需要的朋友可以参考下。