语音功能

首先到讯飞语音官网注册,创建应用,把需要的   官方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;
         }
     }

做一张效果图看一下,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值