语音识别之语音控制
来源:互联网 发布:mac升级后windows没了 编辑:程序博客网 时间:2024/04/29 21:08
接上文,如何实现语音控制呢?比如当我们说天气的时候,界面会自动呈现的天气预报的界面,当我们说UC的时候,会自动跳转到UC浏览器上等等。其实方法很简单,仅仅需要对识别到的字符串进行判断,当它符合特定的字符串是就对Activity进行跳转,跳转到自己写好的Activity上,或者跳转到已安装的应用上,下面来看具体怎么实现:
首先我们在layout布局里增加一个ToggleButton用于开关语音控制:
然后我们就在获取结果的RecognizerDialogListener下面改变几行代码:
- RecognizerDialogListener recoListener = new RecognizerDialogListener() {
- @Override
- public void onResults(ArrayList<RecognizerResult> results,
- boolean isLast) {
- //新增加了一个ToggleButton tb,首先检查tb是否被按下,如果被按下才进行语言控制,没被按下就进行文字识别
- if (tb.isChecked()) {
- //doVoice方法就是进行识别
- doVoice(results);
- } else {
- // 服务器识别完成后会返回集合,我们这里就只得到最匹配的那一项
- text += results.get(0).text;
- System.out.println(text);
- }
- }
RecognizerDialogListener recoListener = new RecognizerDialogListener() {@Overridepublic void onResults(ArrayList<RecognizerResult> results,boolean isLast) {//新增加了一个ToggleButton tb,首先检查tb是否被按下,如果被按下才进行语言控制,没被按下就进行文字识别if (tb.isChecked()) {//doVoice方法就是进行识别doVoice(results);} else {// 服务器识别完成后会返回集合,我们这里就只得到最匹配的那一项text += results.get(0).text;System.out.println(text);}}如果进行语言识别就把返回的结果传入上面的doVoice方法里,doVoice如下:
- //首先迭代结果,然后获取每个结果,并进行对比,如果包含有特定字符串,那么就执行相应Intent跳转。
- //注意 凡是Intent能办到的(发邮件,跳到已安装应用,拨号,发短信,发彩信,浏览网页,播放多媒体。。。。),它就都能办到。
- private void doVoice(ArrayList<RecognizerResult> results) {
- Intent i = new Intent();
- for(RecognizerResult result : results){
- if(result.text.contains("天气")){
- //天气界面的跳转
- i.setClass(Voice1Activity.this, Weather.class);
- startActivity(i);
- }else if(result.text.contains("新闻")){
- //新闻界面的跳转
- i.setClass(Voice1Activity.this, News.class);
- startActivity(i);
- }else if(result.text.contains("短信")){
- //短信界面的跳转
- i.setAction(Intent.ACTION_VIEW);
- i.setType("vnd.android-dir/mms-sms");
- startActivity(i);
- }else{
- //如果没有相应指令就用Toast提示用户
- Toast.makeText(Voice1Activity.this,"无法识别", Toast.LENGTH_SHORT).show();
- }
- }
- }
//首先迭代结果,然后获取每个结果,并进行对比,如果包含有特定字符串,那么就执行相应Intent跳转。//注意 凡是Intent能办到的(发邮件,跳到已安装应用,拨号,发短信,发彩信,浏览网页,播放多媒体。。。。),它就都能办到。private void doVoice(ArrayList<RecognizerResult> results) {Intent i = new Intent();for(RecognizerResult result : results){if(result.text.contains("天气")){//天气界面的跳转i.setClass(Voice1Activity.this, Weather.class);startActivity(i);}else if(result.text.contains("新闻")){//新闻界面的跳转i.setClass(Voice1Activity.this, News.class);startActivity(i);}else if(result.text.contains("短信")){//短信界面的跳转i.setAction(Intent.ACTION_VIEW);i.setType("vnd.android-dir/mms-sms");startActivity(i);}else{//如果没有相应指令就用Toast提示用户Toast.makeText(Voice1Activity.this, "无法识别", Toast.LENGTH_SHORT).show();}}}
如下是做得相应简单界面:
其实在主UI里执行那么耗时操作比如语音的识别与控制并不是很好的方法,其实完全可以把这些耗时的操作交给Service来做只要在主Activity的开始,启动一个Service,定义好各种逻辑接口并把那些耗时的操作交给Service就行了,在Service里面实现语音的识别,控制和逻辑的跳转。
源码地址:http://115.com/file/c2403e81#VoiceContral.rar
- 语音识别之语音控制
- 语音识别之语音控制
- 语音识别之语音控制
- 语音识别电脑控制
- 语音朗读-语音识别-语音控制软件源码
- android之语音识别
- 语音识别之MFCC
- 语音识别 之 MFCC
- Hololens入门之语音识别(语音命令)
- Hololens入门之语音识别(语音听写)
- python实现百度语音之语音识别
- 语音识别&语音朗诵
- 语音识别标准之痛
- HTML5之语音识别实例
- 语音识别之初体验
- 语音识别之自我总结
- 语音识别之端点检测
- 语音识别之发音字典
- Flex中使用IFRRAME以调用外部网页使用注意事项
- iOS xCode4.5.2兼容低版本sdk,如sdk4.2等。
- MFC中Ini文件
- Lucene的索引文件格式(二)
- Android中休眠与唤醒之wake_lock, early_suspend, late_resume
- 语音识别之语音控制
- 23种模式设计之生成器模式
- ASP.NET验证控件之RangeValidator
- iReport连接oracle
- javascript 判断浏览器版本
- about ubuntu apt keyring
- 设置Android模拟器上网的方法
- ubuntu下7z文件的解压方法
- 三个Java线程(使用线程池)交替打印1到75个数的两种解法