1.导入jar,类库和资产资源:
根据对应平台导入
注意事项: 1.eclipse 直接导入libs 就行了,as:分别导入 libs和jniLibs.
2.android 5.0 要导入 armeabi和 armeabi-v7a 才能正常使用 不导入情况如下:
还有一个就是组件没安装错误....
2.添加权限和appid:
<!--连接网络权限,用于执行云端语音能力 --><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" />
<!--读取联系人权限,上传联系人需要用到此权限 -->
<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" />
<!--手机定位信息,用来为语义等功能提供定位, 提供更精准的服务 -->
<!-- 定位信息是敏感信息, 可通过Setting.setLocationEnable(false)关闭定位请求 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
如需使用人脸识别,还要添加:
<!--摄相头权限, 拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" />
appid:创建一个application:
3.创建 语音听写对象:
com.iflytek.cloud.SpeechRecognizer mIat= com.iflytek.cloud.SpeechRecognizer.createRecognizer(this, null); mIat.setParameter(SpeechConstant.DOMAIN, "iat"); mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); mIat.setParameter(SpeechConstant.ACCENT, "mandarin ");
4.创建对话框
RecognizerDialog mDialog = new RecognizerDialog(this, mInitListener); mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); mDialog.setParameter(SpeechConstant.ACCENT, "mandarin"); mDialog.setListener(mRecognizerDialogListener);
接口直接alt+enter 生成看命名就知道其作用
5.监听语音对象和显示对话框
注意事项:startlistening() 监听不能放在.show()下面:不然会有bug
而且执行onresult的是mdialog里面的监听方法,并不会执行 mRecoListener里面的onresult方法,虽然换一下位置是可以执行...但有bug
6.在onresult 中解析生成的结果
private void printResult(RecognizerResult results) { String text = JsonParser.parseIatResult(results.getResultString()); String sn = ""; // 读取json结果中的sn字段 try { JSONObject resultJson = new JSONObject(results.getResultString()); sn = resultJson.optString("sn"); } catch (JSONException e) { e.printStackTrace(); } mIatResults.put(sn, text); // StringBuffer resultBuffer = new StringBuffer(); for (String key : mIatResults.keySet()) { resultBuffer.append(mIatResults.get(key)); } String s = new String(resultBuffer); // s.endsWith(""); // et_speech.setText(new String(resultBuffer).replaceAll("\\W","")); et_speech.setText(resultBuffer);
注意事项:onresult 会执行多次,所以需要一个集合存储句子.....
更多信息:http://www.xfyun.cn/doccenter/awd