浅谈AndroidStudio2.3.3添加讯飞语音功能

        目前很多安卓应用都用到语音识别功能,通常情况下,我们都是通过接入第三方API来实现的。本人最近写了一个简易的快递查询,在Androidstudio(版本2.3.3)嵌入讯飞语音功能时遇到了点问题,现分享讯飞语音功能的添加,以及出现问题的解决方案给大家,希望对大家有所帮助。本人小白一枚,文章中有讲的不对的,还请多多指教。

          首先你应该去科大讯飞的开发平台:http://www.xfyun.cn/ 注册账号获取Sdk开发工具包以及APPID,后面会用到。具体步骤百度上都有。

       讯飞语音开发前的准备工作:

       接下来我们创建一个新的安卓项目,然后把我们下载好的Sdk里面的Msc.jar以及Sunflower.jar放到app->libs目录下(如果没有libs文件夹,自行创建一个)。放入目录有的版本不能自动添加依赖,你要自己手动添加。在Msc.jar右键选择Add As Library,点击进去再点ok,等待一会。当再次点击Msc.jar时有出现以下文件夹,说明添加依赖成功。另一个Sunflower.jar同样进行相同的步骤。

                   浅谈AndroidStudio2.3.3添加讯飞语音功能     浅谈AndroidStudio2.3.3添加讯飞语音功能

                              图一、添加依赖步骤  (图中其他jar包是我其他项目的,你们不用添加)


                                                            浅谈AndroidStudio2.3.3添加讯飞语音功能

                                                                        图二、添加依赖成功图

         之后在app->src->main目录下新建assets文件夹(若本来就有这两个文件就不用再新建),以及jniLibs文件夹,分别放入如下文件,这些文件都是从官网下载下来的sdk工具包里面拷贝过来的。

                                       浅谈AndroidStudio2.3.3添加讯飞语音功能

    开始进入讯飞语音开发:

   首先编写一个简单的xml布局用来测试语音的实现,布局如下:

              浅谈AndroidStudio2.3.3添加讯飞语音功能

    

     然后新建一个BaseApplication类继承于Application 用于讯飞APPKey验证注册:

              public class BaseApplication extends Application {
               @Override
                public void onCreate() {
                super.onCreate();
                // 讯飞语音的初始化
           SpeechUtility.createUtility(this, SpeechConstant.APPID + "=appkey");
                                       }
       }


      注意里面的APPID,这个是刚开始我们去讯飞开发平台自己注册的APPID。然后再AndroidManifest的Application中添加属性

     即如图所示:浅谈AndroidStudio2.3.3添加讯飞语音功能

      接下来在AndroidManifest中添加权限:

      <!-- 连接网络权限,用于执行云端语音能力  -->  
      <uses-permission android:name="android.permission.INTERNET" />
      <!-- 获取手机录音机使用权限,听写、识别、语义理解需要用到此权限  --> 
      <uses-permission android:name="android.permission.RECORD_AUDIO" />
      <!-- 读取网络信息状态  -->
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
       新建一个Contast 工具类,用于存放讯飞语音结果集转换:

public static String parseIatResult(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");
            JSONObject obj = items.getJSONObject(0);
            ret.append(obj.getString("w"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return ret.toString();
}
  接下来在MainActivity.java中首先编写点击语音图标的点击事件:

case R.id.imageView_xunfeiyuyin://语音
    //1.创建dialog对象
    RecognizerDialog iatDialog = new RecognizerDialog(mContext, null);
    iatDialog.setListener(mRecognizerDialogListener); //2.设置回调接口  
    iatDialog.show();  //3.开始听写  显示窗口
    break;
    接下来编写语音输入后的结果集转换:

RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() {
    public void onResult(RecognizerResult results, boolean isLast) {
        // 打印结果 当isLast为true时,说明结果结束
        Log.i("huark", "讯飞语音");
        String expressNum = Contast
                .parseIatResult(results.getResultString());
        // 拼接
        if (!isLast) {
            mExpressNum.append(expressNum);
        }
    }

    public void onError(SpeechError error) {
        // 出错
        Toast.makeText(mContext, "您没有说话,请重新点击语音按钮", Toast.LENGTH_SHORT).show();
    }
};

        接下来运行虚拟机,运行成功:

                                                       浅谈AndroidStudio2.3.3添加讯飞语音功能

      可能出现的一些问题:

       1、如果出现以下情况,即jniLlibs文件夹未创建以及里面的文件没有拷贝进去:

                                                               浅谈AndroidStudio2.3.3添加讯飞语音功能

   2、 若出现以下情况,即APPID出错,相应的APPID对应的jniLlibs文件要一样(即从官网下载下来用你自己注册的APPID和sdk开发工具包)

                                   浅谈AndroidStudio2.3.3添加讯飞语音功能

     3、 有时会出现以下错误:

浅谈AndroidStudio2.3.3添加讯飞语音功能

   需在build.gradle(Module:app)dependencies下添加如下代码:

         compile files('libs/Msc.jar')

         compile files('libs/Sunflower.jar')

    4、未加<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>权限出现以下问题:

     浅谈AndroidStudio2.3.3添加讯飞语音功能

   时间匆忙,加上技术不是很强,有哪里出错的还望各位大佬指出,谢谢各位。 想要这个简单项目源码的私聊我QQ:184188719。