欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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