科大讯飞语音实现Android拨号之一
2016-05-10 23:27
816 查看
科大讯飞语音实现Android拨号之一
此文为博主原创,转载注明出处/article/11098559.html这段时间由于自身项目功能的完善需要用上语音拨号功能,但由于网上各种资料参差不齐,而且自己本身主要在做C++,对于Android端代码不甚了解,如果有错误,欢迎交流。希望可以帮到大家,
原谅我一言不合就上代码…=-=
科大讯飞语音
科大讯飞提供了多种语音功能,详情请参照http://www.xfyun.cn/services/service
在科大讯飞网站注册,下载SDK包,并在Demo中可以找到开发文档
代码块语法遵循标准markdown代码,例如:
SpeechUtility.createUtility(this, "appid=xxxxxxx");
其中xxxxxxx是你的APPID,这里基本的语音识别可以进行参考讯飞论坛http://bbs.xfyun.cn/forum.php
语义理解
我这个应用集成语音拨号是基于语义理解的,因此,我们要先设置
python //语义理解对象 private com.iflytek.cloud.SpeechUnderstander understander;
在onCreate()里面进行设置
python //init() understander= SpeechUnderstander.createUnderstander(this,hInitListener); private InitListener hInitListener = new InitListener() { @Override public void onInit(int i) { // Log.d(TAG, "SpeechRecognizer init() code = " + i); } };
我们需要对语义理解的对象进行设置
python //1.创建语音语义理解对象 SpeechUnderstander understander = SpeechUnderstander.createUnderstander(context, null); //2.设置参数,语义场景配置请登录 http://osp.voicecloud.cn/ understander.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); //3.开始语义理解 understander.startUnderstanding(mUnderstanderListener); // XmlParser为结果解析类,见SpeechDemo private SpeechUnderstanderListener mUnderstanderListener = new SpeechUnderstanderListener(){ public void onResult(UnderstanderResult result) { String text = result.getResultString(); } public void onError(SpeechError error) {}//会话发生错误回调接口 public void onBeginOfSpeech() {}//开始录音 public void onVolumeChanged(int volume){} //音量值0~30 public void onEndOfSpeech() {}//结束录音 public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}//扩展用接口 };
上传联系人
python //获取 ContactManager 实例化对象 ContactManager mgr = ContactManager.createManager(context, mContactListener); //异步查询联系人接口,通过 onContactQueryFinish 接口回调 mgr.asyncQueryAllContactsName(); //获取联系人监听器。 private ContactListener mContactListener = new ContactListener() { @Override public void onContactQueryFinish(String contactInfos, boolean changeFlag) { //指定引擎类型 mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); mIat.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8"); ret = mIat.updateLexicon("contact", contactInfos, lexiconListener); if(ret != ErrorCode.SUCCESS){ Log.d(TAG,"上传联系人失败:" + ret); } }}; //上传联系人监听器。 private LexiconListener lexiconListener = new LexiconListener() { @Override public void onLexiconUpdated(String lexiconId, SpeechError error) { if(error != null){ Log.d(TAG,error.toString()); }else{ Log.d(TAG,"上传成功!"); } }
JSon解析
{
“semantic”: {
“slots”: {
“name”: “张三”
}
},
“rc”: 0,
“operation”: “CALL”,
“service”: “telephone”,
“text”: “打电话给张三”
}这是讯飞解析的结果
于是我们要获取name进行与手机联系人进行匹配,然后导出联系人电话号码,进行拨号,这样语音控制拨号就能够成功了,具体的实现我将在后面提出
相关文章推荐
- android学习16——library project的使用
- Android 64K解决办法
- Android--SQLite数据库
- Android 简单封装一个精美、好用的菜单型PopupWindow
- AndroidManifest.xml
- Android--Handler消息处理机制
- Android项目目录结构
- Android录音--AudioRecord、MediaRecorder
- android权限大全
- 如何获取android中正在运行的服务
- android:descendantFocusability用法简析-ListView与Button、RadioButton焦点冲突问题
- ArrayAdapter简单适配器用法Android
- 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
- Android (shape,gradient)使用总结 (2
- Android学习之获取系统应用信息列表的实现
- android关于fragment的构造函数用法建议
- Android获取LayoutInflater对象的方法总结
- Android开发笔记之图片的颜色处理
- android关于RandomAccessFile
- Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示