Android 开发系统自带语音模块应用
程序员文章站
2024-03-04 15:49:17
需求:项目中需要添加语音搜索模块,增加用户体验
解决过程:在网上搜到语音搜索例子,参考网上代码,加入到了自己的项目,完成产品要求。这个问题很好解决,网上能找到很多的资...
需求:项目中需要添加语音搜索模块,增加用户体验
解决过程:在网上搜到语音搜索例子,参考网上代码,加入到了自己的项目,完成产品要求。这个问题很好解决,网上能找到很多的资料,但是没有直接导入工程就能用的例子,我这里写了一个完整的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中进行。开发的过程中遇到一些语音搜索崩溃的现象,最后发现在结果展示的时候不要做一些费时的操作。
代码如下
public class mainactivity extends activity { private button btnvoice; private textview tvvoiceresult; private static final int voice_recognition_request_code = 123456; private handler jumphandler = new handler() { public void handlemessage(android.os.message msg) { tvvoiceresult.settext((string)msg.obj); }; }; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); btnvoice = (button) findviewbyid(r.id.btnvoice); tvvoiceresult = (textview) findviewbyid(r.id.tvvoiceresult); btnvoice.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { try { intent intent = new intent(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(activitynotfoundexception e) { alertdialog.builder builder = new alertdialog.builder(mainactivity.this); builder.settitle("语音识别"); builder.setmessage("您的手机暂不支持语音搜索功能,点击确定下载安装google语音搜索软件。您也可以在各应用商店搜索“语音搜索”进行下载安装。"); builder.setpositivebutton("确定", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // 跳转到下载语音网页 } }); builder.setnegativebutton("取消", null); builder.show(); } } }); } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.activity_main, menu); return true; } @override protected void onactivityresult(int requestcode, int resultcode, intent data) { 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) { message msg = new message(); msg.obj = matches.get(0); jumphandler.sendmessage(msg); } } } }
以上就是对android 语音模块开发的一个小实例,有需要的朋友可以参考下。