基于android的语音识别
1.注册账户,添加应用

2.针对android平台的选择应用,下载SDK

3.将SDK的libs下文件拷贝到工程的libs目录下

4.添加用户权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.CAMERA"/>
5.初始化语音配置对象
//初始化语音配置对象,必须,这样才能使用MSC语音服务
SpeechUtility.createUtility(this, SpeechConstant.APPID+"=59454d78");
6.拷贝assets目录下资源文件到android工程的assets目录

7.识别代码
//创建语音识别对话框
RecognizerDialog rd = new RecognizerDialog(this,null);
//设置参数accent,language等参数
rd.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//中文
rd.setParameter(SpeechConstant.ACCENT,"mandarin");//普通话
//设置回调接口
rd.setListener(new RecognizerDialogListener() {
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
//获取返回结果
String result = recognizerResult.getResultString();
Log.e("result",result);
Log.e("b",b+"");
} @Override
public void onError(SpeechError speechError) { }
});
//显示对话框
rd.show();
8.由于返回的是json字符串所以还得解析出来才能使用
result:{"sn":2,"ls":true,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":0.00,"w":"?"}]}]}
9.解析Json字符串
/**
* 解析json串
* @param result
*/
protected String parseJsonData(String json) {
// 使用Gson来解析Json串
Gson gson = new Gson();
VoiceBean bean = gson.fromJson(json, VoiceBean.class);
ArrayList<WS> ws = bean.ws;
StringBuffer sb = new StringBuffer();
for (WS ws2 : ws) {
String info = ws2.cw.get(0).w;
sb.append(info);
}
return sb.toString();
}
10.完整代码
package com.example.chat; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import com.example.chat.VoiceBean.WS;
import com.google.gson.Gson;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView; public class MainActivity extends Activity { StringBuffer strbuf;
ListView mlv;
private List<TalkBean> lists; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化语音配置对象,必须,这样才能使用MSC语音服务
SpeechUtility.createUtility(this, SpeechConstant.APPID+"=59454d78");
mlv = (ListView) findViewById(R.id.lv);
lists = new ArrayList<TalkBean>(); } public void click(View view){
//创建语音识别对话框
RecognizerDialog rd = new RecognizerDialog(this,null);
//设置参数accent,language等参数
rd.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//中文
rd.setParameter(SpeechConstant.ACCENT,"mandarin");//普通话
strbuf = new StringBuffer();
//设置回调接口
rd.setListener(new RecognizerDialogListener() { @Override
public void onResult(RecognizerResult arg0, boolean arg1) {
// TODO Auto-generated method stub
String result = arg0.getResultString();
String data = parseJsonData(result);
Log.e("data",data); strbuf.append(data);
if(arg1){//回话结束
String voice = strbuf.toString();
Log.e("result",voice);
} Log.e("b",arg1+"");
} @Override
public void onError(SpeechError arg0) {
// TODO Auto-generated method stub }
});
//显示对话框
rd.show();
}
/**
* 解析json串
* @param result
*/
protected String parseJsonData(String json) {
// 使用Gson来解析Json串
Gson gson = new Gson();
VoiceBean bean = gson.fromJson(json, VoiceBean.class);
ArrayList<WS> ws = bean.ws;
StringBuffer sb = new StringBuffer();
for (WS ws2 : ws) {
String info = ws2.cw.get(0).w;
sb.append(info);
}
return sb.toString();
}
11.运行结果展示

基于android的语音识别的更多相关文章
- 基于android平台的斗地主AI
本软件是基于android平台的斗地主AI,我们在源代码的基础之上,旨在改进AI的算法,使玩家具有更丰富的体验感,让NPC可以更为智能. (一)玩法解析: (1)发牌和叫牌:一副扑克54张,先为每个人 ...
- 基于Android Studio搭建hello world工程
基于Android Studio搭建hello world工程 版本:ANDROID STUDIO V0.4.6 This download includes: · Android St ...
- 基于Android 平台简易即时通讯的研究与设计[转]
摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...
- 基于Android 4.4 开发的多窗体系统 开放源代码
Hi, 这是我基于Android 4.4开发的多窗体系统,还有非常多不足,还请多多不吝赐教啊,代码已经所有开源. 视频地址 源代码地址 Done: 1. APP以窗体化显示 在 PhoneWindow ...
- 【转】基于 Android NDK 的学习之旅-----数据传输(引用数据类型)
原文网址:http://www.cnblogs.com/luxiaofeng54/archive/2011/08/20/2147086.html 基于 Android NDK 的学习之旅-----数据 ...
- 基于Android Volley的网络请求工具
基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...
- 【源代码】基于Android和蓝牙的单片机温度採集系统
如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例- 基于And ...
- 基于 Android 的 3D 视频示例代码
笔者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...
- Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)
一.引言 本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于Intelli ...
随机推荐
- html自定义调控
为什么需要自定义数据属性? 很多时候我们需要存储一些与不同DOM元素相关联的信息.这些信息对于读者来说可能是不需要的,但是可以轻松的访问这些信息将会给我们开发者的工作带来极大的便利. 例如,假设你有一 ...
- Linux系统OOM killer机制详解
介绍: Linux下面有个特性叫OOM killer(Out Of Memory killer),会在系统内存耗尽的情况下出现,选择性的干掉一些进程以求释放一些内存.广大从事Linux方面的IT农民工 ...
- CSS3弹性伸缩布局(下)——flex布局
新版本 新版本的flex布局模型是2012年9月提出的工作草案,这个草案是由W3C推出的最新语法,这个版本立志于指定标准,让新式的浏览器全面兼容,在未来的浏览器更新换代中实现统一. 目前几乎大部分的浏 ...
- 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10的100次幂。 输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。 输入样例: 1234567890987654321123456789 输出样例: yi san wu
这是PAT中的一道练习题 刚开始的时候我想着直接定义正整数n,结果走了很大的弯路,因为题目中要求n小于10的100次幂,即最大的正整数n有100位,而C语言中整型数字最大占8个字节的存储空间,如果按无 ...
- Tomcat 热部署
Tomcat热部署就是实现不停机的发布项目和更新项目 1.修改conf目录下的tomcat-users.xml文件 在<tomcat-user>添加如下配置 [root@localhost ...
- Android中EditText设置输入条件
一.应用场景 之前做商城应用时,会有对用户资料的设置情况进行限制,如下: (1)用户邮箱,应当只允许输入英文字母,数字和@.两个符号, (2)用户手机,应当只能输入数字,禁止输入其他字符. (3)用户 ...
- java集合系列
工作以来,一直对java集合理解的不够全面,不够深入,就是常用的ArrayList/HashMap/Set/List,有时候会用一下LinkedList.一时兴起,可能对TreeSet,HashSet ...
- 在Ubuntu下永久修改主机名
一. deb/ubuntu上永久修改 : 查看主机名: 修改主机名: 重启后生效 ---------------------------------------------------------- ...
- [转]亿级Web系统搭建:单机到分布式集群
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...
- AJAX的简单梳理
一.Ajax的简介 Ajax,异步JavaScript和XML,异步提交,无刷新技术,局部刷新技术 1)传统的客户端与服务器端交互的模式 客户端发送请求直接给服务端,服务接受到请求后进行逻辑运算,最终 ...