首先到讯飞语音官网注册,创建应用,把需要的 官方sdk 下载 , 解压完之后,按照官方文档操作.
大致上是 拷贝 libs 目录下的 文件,拷贝 assets 到main下,然后在 清单文件 添加权限.
ps : 官方文档中有
<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取当前wifi状态 -->
<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"/>
在activity中的setContentView(R.layout.activity_main) 下面添加 xxxxxxx 就是appkey,
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=xxxxxxxx");
然后 下面的代码可以设置在点击时间在 , 也可以抽成一个方法
//1.创建RecognizerDialog对象,第二参数就是一个初始化的监听,我们用不上就设置为null
RecognizerDialog mDialog = new RecognizerDialog(MainActivity.this,null);
//2.设置accent、language等参数
mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");//设置为中文模式
mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");//设置为普通话模式
//若要将UI控件用于语义理解,必须添加以下参数设置,设置之后onResult回调返回将是语义理解
//mDialog.setParameter("asr_sch", "1");
//mDialog.setParameter("nlp_version", "2.0");
//创建一个装每次解析数据的容器(你说话有停顿,解析就是一段一段的,而用容器就能拼接成一句话了)
mStringBuilder = new StringBuilder();
//3.设置回调接口,语音识别后,得到数据,做响应的处理.
mDialog.setListener(new RecognizerDialogListener() {
//识别成功执行 参数1 recognizerResult:识别出的结果,Json格式(用户可参见附录12.1)
// 参数2 b:等于true时会话结束。方法才不会继续回调
//一般情况下会通过onResults接口多次返回结果,完整的识别内容是多次结果的累加,(关于解析Json的代码可参见MscDemo中JsonParser类)
public void onResult(RecognizerResult recognizerResult, boolean b) {
//拿到讯飞识别的结果
String resultString = recognizerResult.getResultString();
System.out.println("讯飞识别的结果 "+resultString);
//自定义解析bean数据的一个方法.用到了Gson,在项目里关联一下.(这个方法就是下面的)
String text = parseData(resultString);
//容器装解析出来的数据
mStringBuilder.append(text);
//对参数2进行判断,如果为true,代表这个方法不会再回调,就把容器里的数据转成字符串.拿来使用.
if(b){
String result = mStringBuilder.toString();
et.setText(result);
}
}
@Override//识别失败执行 speechError:错误码
public void onError(SpeechError speechError) {
}
});
//4.显示dialog,接收语音输入
mDialog.show();
方法 gson解析的,上面有调用的
private String parseData(String resultString) {
//创建gson对象,记得要关联一下gson.jar包方可以使用.
Gson gson = new Gson();
//参数 1.String类型的json数据 参数 2.存放json数据对应的bean类
//这个类是官方给的,找起来有点麻烦,就写到下面了
XFBean xfBean = gson.fromJson(resultString, XFBean.class);
//创建一个集合,用来存放bean类里的对象.
ArrayList<XFBean.WS> ws = xfBean.ws;
//创建一个容器,用来存放从每个集合里拿到的数据,使用StringBuilder效率更高
StringBuilder stringBuilder = new StringBuilder();
//使用高级for循环,取出特定属性的特有数据,装入StringBuilder中
for ( XFBean.WS w: ws) {
String text = w.cw.get(0).w;
stringBuilder.append(text);
}
//把容器内的数据转为字符串返回出去.
return stringBuilder.toString();
}
上面的在mainactivity里面写,一定要看官方文档,需要拷贝的东西一定要细心.
这个是那个gson'解析需要的类
public class XFBean {
public ArrayList<WS> ws;
public class WS{
public ArrayList<CW> cw;
}
public class CW{
public String w;
}
}
做一张效果图看一下,