Android语音搜索
前言
在现有的软件的搜索框中基本上都会加上语音搜索的图标,以方便用户输入.我们xxxx的搜索框其实也可以借鉴这样的输入方式,提高用户体验.
语音识别有3种方式实现①使用intent调用语音识别程序;②通过sevice的方式实现;③选用接入第3方语音识别库;
下面就这一方案技术①,③实现进行描述.
1. 使用intent调用语音识别程序
Android系统已经为我们提供了通过intent的方式来启动,在代码中只发出一个”android.speech.action.RECOGNIZE_SPEECH”的intent,就可以调用到系统中已经安装好的语音识别软件.我们只要获取返回值并显示即可.调用代码如下:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.hint_code));
startActivityForResult(intent, REQUEST_CODE_RECOGNITION_REQUEST);
当然,如果用户的机子没有安装相关的软件,就会报错,所以我们还需要做如下的处理之一.
1.为上面的代码段添加异常捕获并提示;
2.在调用之前判断下时候用户的机子已经安装了相关的软件,没有则把语音输入的按钮隐藏或者不可操作,判断的代码如下:
public static boolean isApkInstalled(String strIntent){
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(new Intent(strIntent), 0);
return activities != null && !activities.isEmpty();
}
在调用之后在onActivityResult()里添加对语音输入返回的值的过滤.例如在intent中就存在结果集data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);下面示例就是显示输入结果让用户选择正确的输入值,这里是弹出对话框的方式.
if(requestCode == REQUEST_CODE_RECOGNITION_REQUEST && resultCode == RESULT_OK) {
ArrayList<String> results=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
if(results!=null && !results.isEmpty()){
int size=results.size();
audioArray=new String[size];
results.toArray(audioArray);
for(int i=0; i<size;i++){
String str=results.get(i);
if(str!=null){
str.replaceAll(" ", "");
str.replaceAll(" ", "");
}
audioArray[i]=str;
}
showDialog(DIALOG_AUDIO);
}else{
Toast.makeText(this, R.string.hite_audio, Toast.LENGTH_SHORT).show();
}
}
2. 选用接入第3方语音识别库
上面那种是依赖于用户自己已经安装了语音输入的方式,但如果用户机子上没有的话,可以用过提示用户安装.其实更好的方式是采用接入第2,3方的语音输入来实现更可靠些. 下面介绍选用科大讯飞的语音识别库.
科大讯飞语音识别库中主要是用到RecognizerDialog,他是继承与Dialog,所以只要用过showDialog()的方式即可直接显示其输入界面.createDialog代码如下:
RecognizerDialog recognizerDialog = new RecognizerDialog(MainActivity.this, "appid=1234567");
// appid应该写从科大讯飞申请到的appid recognizerDialog.setEngine("sms", null, null);//”sms”:普通文本转写 recognizerDialog.setListener(new RecognizerDialogListener() {
@Override
public void onResults(ArrayList<RecognizerResult> results,
boolean arg1) {
StringBuffer result = new StringBuffer();
for (RecognizerResult r : results) {
result.append(r.text);
}
editText.setText(result.toString());
}
@Override
public void onEnd(SpeechError arg0) {
}
});
Android语音搜索的更多相关文章
- 将语音搜索集成到Google Now中
原文标题:Use Voice Search to integrate with Google Now 原文链接:http://antonioleiva.com/voice_search_google_ ...
- Android语音播报、后台播报、语音识别
Android语音播报.后台播报.语音识别 本文介绍使用讯飞语音实现语音播报.语音识别功能. 讯飞开放平台:http://www.xfyun.cn/index.php/default/index 程序 ...
- 3D语音天气球(源码分享)——在Unity中使用Android语音服务
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
- android浮动搜索框
android浮动搜索框的配置比较繁琐,需要配置好xml文件才能实现onSearchRequest()方法. 1.配置搜索的XML配置文件,新建文件searchable.xml,保存在res/xml ...
- 淘宝语音搜索的实现——html5
作为一个专业的淘宝控,不知道从什么时候开始发现淘宝上居然还有语音搜索,好吧,因为好奇心作祟还是想一探究竟.不过我想仔细一点的人,都会发现在只有在webkit内核的浏览器上有,原因是它只支持webkit ...
- Android 系统搜索框(有浏览记录)
实现Android 系统搜索框(有浏览记录),先看下效果: 一.配置搜索描述文件 要在res中的xml文件加创建sreachable.xml,内容如下: <?xml version=" ...
- 实时Android语音对讲系统架构
本文属于Android局域网内的语音对讲项目系列,<通过UDP广播实现Android局域网Peer Discovering>实现了局域网内的广播及多播通信,本文将重点说明系统架构,音频信号 ...
- 改进Android语音对讲系统的方法
本文属于Android局域网内的语音对讲项目系列,<实时Android语音对讲系统架构>阐述了局域网内Android语音对讲功能的框架,本文在此基础上进行了优化,包括音频的录制.播放,通信 ...
- ---- 关于Android蓝牙搜索到设备的图标显示和设备过滤
根据: https://www.douban.com/note/637446089/http://bbs.16rd.com/blog-23795-3446.html 以下摘自原文: (Android主 ...
随机推荐
- 从date中获取相应信息
创建测试用表: CREATE OR REPLACE VIEW v AS SELECT TO_DATE('2015-5-5 13:14:15', 'YYYY-MM-DD HH24:MI:SS') AS ...
- gcc命令行详解
介绍] ----------------------------------------- 常见用法: GCC 选项 GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但 ...
- 第三百四十九、五十天 how can I 坚持
昨天是忘写博客了,今天下班才突然意思到,搞框架搞了好晚.今天重新下了个好了. 昨天,把存储过程交给同事写了,啥都不会,又一堆问题,折腾了一天. 今天相对轻松些,不过事情还没完..明天又周五了. 还有昨 ...
- Spark给我们带来了什么惊喜?
Spark的一站式解决方案有很多的优势,具体如下.(1)打造全栈多计算范式的高效数据流水线 Spark支持复杂查询. 在简单的“map”及“reduce”操作之外,Spark还支持SQL查询. ...
- 3.VS2010C++相关文件说明
stdafx.h说明:stdafx的英文全称为:Standard Application Framework Extensions(标准应用程序框架的扩展).所谓头文件预编译,就是把一个工程(Proj ...
- 实时监控mysql数据库变化
对于二次开发来说,很大一部分就找找文件和找数据库的变化情况 对于数据库变化.还没有发现比较好用的监控数据库变化监控软件. 今天,我就给大家介绍一个如何使用mysql自带的功能监控数据库变化 1.打开数 ...
- 使用python通过SSH登陆linux并操作
用的昨天刚接触到的库,在windows下通过paramiko来登录linux系统并执行了几个命令,基本算是初试成功,后面会接着学习的. 代码: >>> import paramiko ...
- HDU1003前导和
简单维护前导和 #include<stdio.h> int main() { ],cas,key=; scanf("%d",&cas); while(cas-- ...
- HDU1000
哈哈A+B #include<stdio.h> int main() { int a,b; while(scanf("%d%d",&a,&b)!=EOF ...
- Android 通过ViewFlipper实现广告轮播功能并可以通过手势滑动进行广告切换
为了实现广告轮播功能,在网上找了很多方法,有的效果很好,但是代码太麻烦,并且大多是用的viewpager,总之不是很满意. 于是看了一下sdk有个控件是ViewFlipper,使用比较方便,于是尝试了 ...