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语音模块开发的一个小实例,有需要的朋友可以参考下。