第一步:将下载好的Sdk解压,将压缩文件中的libs下的jar文件放到项目中的libs包下,将压缩文件中的lisb下除jar文件放到main下的jniLibs包中 第二步:Sdk初始化,建议选择在自定义的application中初始化。
//初始化讯飞语音 SpeechUtility.createUtility(getApplicationContext(), SpeechConstant.APPID + "=5bbf3e23");第三步:添加权限,建议自己看文档
<!-- 连接网络权限,用于执行云端语音能力 --> <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.VIBRATE" /> <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" tools:ignore="ProtectedPermissions" /> <!-- 手机定位信息,用来为语义等功能提供定位,提供更精准的服务 --> <!-- 定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 --> <!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> --> <!-- 如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 --> <uses-permission android:name="android.permission.CAMERA" />打包或者生成APK的时候进行混淆
-keep class com.iflytek.**{*;} -keepattributes Signature无Ui界面
//语音听写 private void voice(){ //初始化识别无UI识别对象 //使用SpeechRecognizer对象,可根据回调消息自定义界面; SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, mInitListener); //设置语法ID和 SUBJECT 为空,以免因之前有语法调用而设置了此参数;或直接清空所有参数,具体可参考 DEMO 的示例。 mIat.setParameter(SpeechConstant.CLOUD_GRAMMAR, null); mIat.setParameter(SpeechConstant.SUBJECT, null); //设置返回结果格式,目前支持json,xml以及plain 三种格式,其中plain为纯听写文本内容 mIat.setParameter(SpeechConstant.RESULT_TYPE, "json"); //此处engineType为“cloud” mIat.setParameter(SpeechConstant.ENGINE_TYPE, "cloud"); //设置语音输入语言,zh_cn为简体中文 mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); //设置结果返回语言 mIat.setParameter(SpeechConstant.ACCENT, "zh_cn"); // 设置语音前端点:静音超时时间,单位ms,即用户多长时间不说话则当做超时处理 //取值范围{1000~10000} mIat.setParameter(SpeechConstant.VAD_BOS, "4000"); //设置语音后端点:后端点静音检测时间,单位ms,即用户停止说话多长时间内即认为不再输入, //自动停止录音,范围{0~10000} mIat.setParameter(SpeechConstant.VAD_EOS, "1000"); //设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点 mIat.setParameter(SpeechConstant.ASR_PTT, "0"); //开始识别,并设置监听器 mIat.startListening(new RecogListener()); } private class RecogListener implements RecognizerListener { //音量变化 @Override public void onVolumeChanged(int i, byte[] bytes) { //实现麦克风随着音量的变化而变化 image.getDrawable().setLevel(9000 * i / 100); } //开始录音 @Override public void onBeginOfSpeech() { } //结束录音 @Override public void onEndOfSpeech() { } //解析数据 @Override public void onResult(RecognizerResult recognizerResult, boolean b) { String text = JsonParser.parseIatResult(recognizerResult.getResultString()); String sn = null; // 读取json结果中的sn字段 try { JSONObject resultJson = new JSONObject(recognizerResult.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)); } text.setText(resultBuffer.toString()); } //会话发生错误回调接口 @Override public void onError(SpeechError speechError) { } // 扩展用接口 @Override public void onEvent(int i, int i1, int i2, Bundle bundle) { } }解析Json类
/** * Json结果解析类 */ public class JsonParser { private static StringBuffer ret; public static String parseIatResult(String json) { ret = new StringBuffer(); try { JSONTokener tokener = new JSONTokener(json); JSONObject joResult = new JSONObject(tokener); JSONArray words = joResult.getJSONArray("ws"); for (int i = 0; i < words.length(); i++) { JSONArray items = words.getJSONObject(i).getJSONArray("cw"); JSONObject obj = items.getJSONObject(0); ret.append(obj.getString("w")); } } catch (Exception e) { e.printStackTrace(); } return ret.toString(); }实现麦克风效果滚动
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background" //前背景图 android:drawable="@drawable/background" /> <item android:id="@android:id/progress"> <clip android:clipOrientation="vertical" //背景图 android:drawable="@drawable/progress" android:gravity="bottom" /> </item> </layer-list>