总结如下:
第一步 导入armeabi文件夹和Msc.jar文件如图,然后写两个类
MainActivity中的java代码:
第二步 在activity的onCreate()中写一个方法 initSpeech()方法,并Ctrl+1 实现,如下:
private RecognizerDialog iatDialog; //识别窗口
private SpeechRecognizer iatRecognizer; //识别对象
//初始化讯飞语音控件
public void initSpeech(){
SpeechUser.getUser().login(getActivity(), null, null, "appid="+APPID,listener);
//创建听写对象,如果只使用无UI听写功能,不需要创建RecognizerDialog
iatRecognizer=SpeechRecognizer.createRecognizer(getActivity());
//初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
iatDialog =new RecognizerDialog(getActivity());
}
第三步 写一个点击事件的方法,用于当点击语音按钮时触发该事件,如下:
public void onClick(View v){
showIatDialog();
}
//语音识别对话框
public void showIatDialog()
{
if(null == iatDialog) {
//初始化听写Dialog
iatDialog =new RecognizerDialog(getActivity());
}
String engine="iat_engine";
//清空Grammar_ID,防止识别后进行听写时Grammar_ID的干扰
iatDialog.setParameter(SpeechConstant.CLOUD_GRAMMAR, null);
//设置听写Dialog的引擎
iatDialog.setParameter(SpeechConstant.DOMAIN, engine);
iatDialog.setParameter(SpeechConstant.SAMPLE_RATE, "16000");
//清空结果显示框.
et_number.setText(null);
//显示听写对话框
iatDialog.setListener(recognizerDialogListener);
iatDialog.show();
showToast("请开始说话...");
}
//用户登录回调监听器.
private SpeechListener listener = new SpeechListener()
{
@Override
public void onData(byte[] arg0) {
}
@Override
public void onCompleted(SpeechError error) {
if(error != null) {
showToast(error.getMessage());
}
}
@Override
public void onEvent(int arg0, Bundle arg1) {
}
};
//识别回调监听器
RecognizerDialogListener recognizerDialogListener=new RecognizerDialogListener()
{
@Override
public void onResult(RecognizerResult results, boolean isLast) {
String text = JsonParser.parseIatResult(results.getResultString());
et_number.append(text.replace("。", ""));
et_number.setSelection(et_number.length());
}
public void onError(SpeechError error) {
showToast(error.getMessage());
}
};
@Override
public void onStop() {
if (null != iatRecognizer) {
iatRecognizer.cancel();
}
if (null != iatDialog) {
iatDialog.cancel();
}
super.onStop();
}
第四步:在创建一个类JsonParser.java 里面的写的代码如下:
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import android.text.TextUtils;
//import com.iflytek.speech.ErrorCode;
//import com.iflytek.speech.SpeechError;
/**
* 对云端返回的Json结果进行解析
*/
public class JsonParser {
/**
* 听写结果的Json格式解析
* @param json
* @return
*/
public static String parseIatResult(String json) {
if(TextUtils.isEmpty(json))
return "";
StringBuffer 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();
}
/**
* 识别结果的Json格式解析
* @param json
* @return
*/
public static String parseGrammarResult(String json) {
StringBuffer 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");
for(int j = 0; j < items.length(); j++)
{
JSONObject obj = items.getJSONObject(j);
if(obj.getString("w").contains("nomatch"))
{
ret.append("没有匹配结果.");
return ret.toString();
}
ret.append("【结果】" + obj.getString("w"));
ret.append("【置信度】" + obj.getInt("sc"));
ret.append("\n");
}
}
} catch (Exception e) {
e.printStackTrace();
ret.append("没有匹配结果.");
}
return ret.toString();
}
/**
* 语义结果的Json格式解析
* @param json
* @return
*/
public static String parseUnderstandResult(String json) {
StringBuffer ret = new StringBuffer();
try {
JSONTokener tokener = new JSONTokener(json);
JSONObject joResult = new JSONObject(tokener);
ret.append("【应答码】" + joResult.getString("rc") + "\n");
ret.append("【转写结果】" + joResult.getString("text") + "\n");
ret.append("【服务名称】" + joResult.getString("service") + "\n");
ret.append("【操作名称】" + joResult.getString("operation") + "\n");
ret.append("【完整结果】" + json);
} catch (Exception e) {
e.printStackTrace();
ret.append("没有匹配结果.");
}
return ret.toString();
}
}