• 讯飞语音官网给的demo是在导入android studio中经常出错,我也是反反复复搞了一个多星期终于把最简单的跑出来了....不得不说官方文档给的太太太.....如果直接是项目中需要引用讯飞语音可以直接看这个资源项目结构  ...

    讯飞语音官网给的demo是在导入android studio中经常出错,我也是反反复复搞了一个多星期终于把最简单的跑出来了....不得不说官方文档给的太太太.....如果直接是项目中需要引用讯飞语音可以直接看这个资源项目结构 

    https://download.csdn.net/download/qq_31390999/10708132

     

    讯飞语音目前key值必须要和sdk对应,因此其实你是无法使用别人的key值和sdk的,所以所有的sdk和key都要换成自己的。下载后的sdk解压目录是这个样子的,文件中的assets libs 都是我们要导的资源,sample文件夹中是讯飞语音自带的demo,但是这个demo需要导入很多文件,文件导不对很容易出错

     将文件夹libs下的所有资源均导入到app文件夹下的libs下,就是将sdk下libs文件下拷到app文件下,将assets文件导入到main文件夹下

    很多人建议要在main文件下新建jniLibs文件夹放除了jar包以外的其它资源,但是我的一直在报错(直到我把jniLibs中的文件全复制到libs下,竟然成功了!!!)

    一些权限信息

        <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"/>
        <!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    如果找不到jar包,在module gradle文件中设置

    implementation files('libs/Msc.jar')
    implementation files('libs/Sunflower.jar')
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    如果不行尝试以下方式 在module gradle 的 android的defaultConfig设置

    ndk {
        abiFilters "armeabi-v7a", "x86", 'armeabi'
        // DO NOT MODIFY THIS LINE, IT'S UPDATED BY BUILD MACHINE AUTOMATICALLY.
    }

     

    或者

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

    最终的项目结构

    顺便说一下,最开始我的项目一直报各种错,我还以为是assets下iflytek里面的recognize.xml乱码导致,实际上recognize.xml的确是乱码,但是导致错误的并不是这个文件,而是导包的时候没有放在正确的位置。

    展开全文
  • 通过使用科大讯飞的API开发Android APP实现语音识别 下载相应SDK 访问https://www.xfyun.cn/?jump=login进行注册,然后创建一个应用并进行相应SDK下载 添加相应的包 打开刚刚下载的SDK,找到libs,将两个jar包...

    简介

    通过使用科大讯飞的API开发Android APP实现语音识别

    下载相应SDK

    访问https://www.xfyun.cn/?jump=login进行注册,然后创建一个应用并进行相应SDK下载
    在这里插入图片描述

    添加相应的包

    打开刚刚下载的SDK,找到libs,将两个jar包复制到Android工程里
    在这里插入图片描述
    在这里插入图片描述
    右键libs进行添加
    在这里插入图片描述
    在main下创建jinLibs
    在这里插入图片描述在这里插入图片描述

    将刚刚下载的SDK包libs里剩下的复制进去
    在这里插入图片描述在这里插入图片描述
    OK,环境配置完成,现在就可以开始写代码了

    参考代码

    实现通过按下一个按钮,进行语音输入,然后将语音转换成文本显示在TextView里

    在AndroidManifest.xml添加相应权限

     <!--连接网络权限,用于执行云端语音能力 --> 
     <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" /> 
    

    初始化

    初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

    // 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
    // 请勿在“=”与appid之间添加任何空字符或者转义符
    SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");
    

    在这里插入图片描述将代码放在主Activity的 protected void onCreate(Bundle savedInstanceState)

    主Activity代码

    public class MainActivity extends AppCompatActivity {
    
        private TextView tv_content;
        
        // 用HashMap存储听写结果
        private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            tv_content = (TextView) findViewById(R.id.textView_content);
            
            SpeechUtility.createUtility(this, SpeechConstant.APPID +"=111111");
        }
    
        public void startSpeechClick(View view) {
            //初始化识别无UI识别对象
            //使用SpeechRecognizer对象,可根据回调消息自定义界面;
            SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(this, null);
            //设置参数
            mIat.setParameter(SpeechConstant.PARAMS, "iat");      //应用领域
            mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); //语音
            mIat.setParameter(SpeechConstant.ACCENT, "mandarin"); //普通话
            mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);//引擎
            mIat.setParameter(SpeechConstant.RESULT_TYPE, "json");//返回结果格式
            // 设置语音前端点:静音超时时间,即用户多长时间不说话则当做超时处理
            mIat.setParameter(SpeechConstant.VAD_BOS, "4000");
            // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音
            mIat.setParameter(SpeechConstant.VAD_EOS,"1000");
            // 设置标点符号,设置为"0"返回结果无标点,设置为"1"返回结果有标点
            mIat.setParameter(SpeechConstant.ASR_PTT, "0");
    
            // 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
           // mIat.setParameter(SpeechConstant.AUDIO_FORMAT,"wav");
            //mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/iat.wav");
    
            //开始听写
            mIat.startListening(mRecoListener);
        }
    
            private RecognizerListener mRecoListener= new RecognizerListener() {
    
                //音量0-30
                @Override
                public void onVolumeChanged(int i, byte[] bytes) {
    
                }
    
                //开始录音
                @Override
                public void onBeginOfSpeech() {
    
                }
    
                //结束录音
                @Override
                public void onEndOfSpeech() {
    
                }
    
                //返回结果
                @Override
                public void onResult(RecognizerResult recognizerResult, boolean b) {
                    System.out.println(recognizerResult.getResultString());
                    printResult(recognizerResult);
                }
    
                @Override
                public void onError(SpeechError speechError) {
    
                }
    
                @Override
                public void onEvent(int i, int i1, int i2, Bundle bundle) {
    
                }
            };
    
        //输出结果
        private void printResult(RecognizerResult results) {
            String text = JsonParser.parseIatResult(results.getResultString());
    
            String sn = null;
            // 读取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));
            }
    
            
            tv_content.setText(resultBuffer.toString());
           
        }
    }
    

    添加json进行解析

    将刚刚下载的SDK里的JsonParser.java添加到java里
    在这里插入图片描述
    在这里插入图片描述

    activity_main.xml参考代码

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <Button
            android:id="@+id/button_input"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="startSpeechClick"
            android:text="@string/button_input"
            android:layout_centerHorizontal="true"
            />
    
        <TextView
            android:id="@+id/textView_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:layout_below="@id/button_input"
            android:layout_centerHorizontal="true"
            />
    </RelativeLayout>
    

    现在可以将代码下载到手机里进行测试了
    注: 1.需要用真机 2.需要联网

    源码下载

    展开全文
  • 老规矩:第一步,上效果图事先说明:语音听写SDK适配安卓6.0需要手动申请权限...并创建应用步骤三:在SDK下载中下载语音听写、Android平台、我的应用进行下载步骤四:解压下载包,在libs中对应导入Android Studio中你...

    老规矩:第一步,上效果图




    事先说明:

    语音听写SDK适配安卓6.0需要手动申请权限,各位可以自信查询资料实现,关于语音听写SDK的开发,参考科大讯飞开放平台官网为准

    步骤一:百度科大讯飞开发者平台,找到官网进入

    步骤二:在科大讯飞开发者平台官网注册账号,并创建应用
    步骤三:在SDK下载中下载语音听写、Android平台、我的应用进行下载

    步骤四:解压下载包,在libs中对应导入Android Studio中

    你需要在Android Studio中手动创建一个jniLibs文件夹,记得libs的jar包右键Add As Library
    步骤五:复制assets文件夹到项目中

    步骤六:根据需求,在Manifests文件中添加权限,注意之前的权限,重复的删除
    <!--连接网络权限,用于执行云端语音能力 -->  
    <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" />  

    步骤七:在代码中初始化SDK
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
      
        // 将“xxxxxxx”替换成您申请的 APPID   
        SpeechUtility.createUtility(this, SpeechConstant.APPID +"=xxxxxxx");   
    }  
    步骤八:在代码中封装语音识别实体,然后封装个方法使用
    /**
         * 初始化语音识别
         */
        public void initSpeech(final Context context) {
            //1.创建RecognizerDialog对象
            RecognizerDialog mDialog = new RecognizerDialog(context, null);
            //2.设置accent、language等参数
            mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
            mDialog.setParameter(SpeechConstant.ACCENT, "mandarin");
            //3.设置回调接口
            mDialog.setListener(new RecognizerDialogListener() {
                @Override
                public void onResult(RecognizerResult recognizerResult, boolean isLast) {
                    if (!isLast) {
                        //解析语音
                        //返回的result为识别后的汉字,直接赋值到TextView上即可
                        String result = parseVoice(recognizerResult.getResultString());
                    }
                }
    
                @Override
                public void onError(SpeechError speechError) {
    
                }
            });
            //4.显示dialog,接收语音输入
            mDialog.show();
        }
    
        /**
         * 解析语音json
         */
        public String parseVoice(String resultString) {
            Gson gson = new Gson();
            Voice voiceBean = gson.fromJson(resultString, Voice.class);
    
            StringBuffer sb = new StringBuffer();
            ArrayList<Voice.WSBean> ws = voiceBean.ws;
            for (Voice.WSBean wsBean : ws) {
                String word = wsBean.cw.get(0).w;
                sb.append(word);
            }
            return sb.toString();
        }
    /**
     * 语音对象封装 
     */
    public class Voice {
    
        public ArrayList<WSBean> ws;
    
        public class WSBean {
            public ArrayList<CWBean> cw;
        }
    
        public class CWBean {
            public String w;
        }
    }  
    




    由于语音识别返回的是个Json数据,所以这里我们使用Gson这个包进行解析,需要添加依赖

    compile 'com.google.code.gson:gson:2.2.4' 

    步骤九:我们用一个按钮调用这个initSpeech方法,并将返回的result显示在TextView中即可,

    这里我们就已经完成了

    展开全文
  • 实现android语音识别一、准备工作科大讯飞开放云平台:http://www.xfyun.cn,自行注册。 注册完毕后下载科大讯飞云平台提供的SDK,勾选下面的服务选择android平台后,下载SDK。 - 按照提示完成SDK配置和权限添加...

    #实现android语音识别


    下载地址:
    https://download.csdn.net/download/huosanghuakai1995/10348660

    ##一、准备工作

    科大讯飞开放云平台:http://www.xfyun.cn,自行注册。

    • 注册完毕后下载科大讯飞云平台提供的SDK,勾选下面的服务选择android平台后,下载SDK。

    这里写图片描述


    • 按照提示完成SDK配置和权限添加工作
    • 将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下。
    • 在工程 AndroidManifest.xml 文件中添加权限:

    <!--连接网络权限,用于执行云端语音能力 -->
    <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" />
    

    • 初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

    SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");//APPID是你自己注册的APPID,可以自己去查看
    

    ##二、开始新建android工程

    • java代码:
      主activity
    package com.demo.voice;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import sina.CreAmazing.voice.R;
    import android.app.Activity;
    import android.content.ComponentName;
    import android.content.Context;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.content.pm.ResolveInfo;
    import android.os.Bundle;
    import android.text.NoCopySpan.Concrete;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    import android.widget.ToggleButton;
    import com.iflytek.speech.RecognizerResult;
    import com.iflytek.speech.SpeechError;
    import com.iflytek.speech.SynthesizerPlayer;
    import com.iflytek.ui.RecognizerDialog;
    import com.iflytek.ui.RecognizerDialogListener;
    import com.iflytek.ui.SynthesizerDialog;
    import com.iflytek.ui.SynthesizerDialogListener;
    
    public class VoiceRecognize extends Activity {
    
        // 声明控件
        private EditText et;
        private Button bt1;
        private Button bt2;
        private Button bt3;
        private ToggleButton tb;
        private PackageManager pm;
        // 全局只设一个String,因为String为final类型,这样做节省内存
        String text = "";
        private static final String APPID = "appid=11111111";//定义一个常量APPPID,我自己的不便公开需要修改为你自己的;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            //这是后台朗读,实例化一个SynthesizerPlayer
            SynthesizerPlayer player = SynthesizerPlayer.createSynthesizerPlayer(VoiceRecognize.this, APPID);
            //设置语音朗读者,可以根据需要设置男女朗读,具体请看api文档和官方论坛
            player.setVoiceName("vivixiaoyan");//在此设置语音播报的人选例如:vivixiaoyan、vivixiaomei、vivixiaoqi
            player.playText("hello world", "ent=vivi21,bft=5",null);
    
    
            bt1 = (Button) findViewById(R.id.bt_recognize);
            bt2 = (Button) findViewById(R.id.bt_speek);
            bt3 = (Button) findViewById(R.id.bt_speek_bg);
            et = (EditText) findViewById(R.id.et);
            tb = (ToggleButton) findViewById(R.id.tb);
            // 初始化监听器
            initListener();
    
        }
    
        private void initListener() {
            bt1.setOnClickListener(myListener);
            bt2.setOnClickListener(myListener);
            bt3.setOnClickListener(myListener);
    
        }
    
        OnClickListener myListener = new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                // 根据不同View的id调用不同方法
                switch (v.getId()) {
                    case R.id.bt_recognize:
                        // 这是语言识别部分,最重要的实例化一个
                        // RecognizerDialog并把在官方网站申请的appid填入进去,非法id不能进行识别
                        RecognizerDialog isrDialog = new RecognizerDialog(VoiceRecognize.this, APPID);
    
                        /*
                         * 设置引擎目前支持五种 ”sms”:普通文本转写 “poi”:地名搜索 ”vsearch”:热词搜索
                         * ”video”:视频音乐搜索 ”asr”:命令词识别
                         */
                        isrDialog.setEngine("sms", null, null);
                        isrDialog.setListener(recoListener);
                        isrDialog.show();
                        break;
    
                    case R.id.bt_speek:
                        // 这是语言合成部分 同样需要实例化一个SynthesizerDialog ,并输入appid
                        SynthesizerDialog syn = new SynthesizerDialog(VoiceRecognize.this, APPID);
                        syn.setListener(new SynthesizerDialogListener() {
    
                            @Override
                            public void onEnd(SpeechError arg0) {
    
                            }
                        });
                        // 根据EditText里的内容实现语音合成
                        syn.setText(et.getText().toString(), null);
                        syn.show();
                        break;
    
    
                    case R.id.bt_speek_bg:
                        //这是后台朗读,实例化一个SynthesizerPlayer
                        SynthesizerPlayer player = SynthesizerPlayer.createSynthesizerPlayer(VoiceRecognize.this, APPID);
                        //设置语音朗读者,可以根据需要设置男女朗读,具体请看api文档和官方论坛
                        player.setVoiceName("vivixiaoyan");//在此设置语音播报的人选例如:vivixiaoyan、vivixiaomei、vivixiaoqi
                        player.playText(et.getText().toString(), "ent=vivi21,bft=5",null);
                        break;
                    default:
                        break;
                }
    
            }
        };
        public  void openApp(String str){  
            //应用过滤条件,intent启动是应用的顶层  
            Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
            mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
            PackageManager mPackageManager =getPackageManager();  
            //返回给定条件的所有ResolveInfo对象(本质为activity)
            List<ResolveInfo> mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);  
            //按包名排序  
            Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));  
            for(ResolveInfo res : mAllApps){  
                //该应用的包名和主Activity  
                String pkg = res.activityInfo.packageName;  
                String cls = res.activityInfo.name;  
                System.out.println("pkg~~~~~~" +pkg);  
                // 打开QQ pkg中包含"qq",打开微信,pkg中包含"mm"  
                if(pkg.contains(str)){  
                    ComponentName componet = new ComponentName(pkg, cls);
                    
                    Intent intent = new Intent();  
                    intent.setComponent(componet);  
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                    VoiceRecognize.this.startActivity(intent);  
                }  
            }
     }
    
        // 语言识别监听器,有两个方法
        RecognizerDialogListener recoListener = new RecognizerDialogListener() {
    
            @Override
            public void onResults(ArrayList<RecognizerResult> results,
                    boolean isLast) {
                // 新增加了一个ToggleButton tb,首先检查tb是否被按下,如果被按下才进行语言控制,没被按下就进行文字识别
                if (tb.isChecked()) {
                    // doVoice方法就是进行识别
                    doVoice(results);
                } else {
                    // 服务器识别完成后会返回集合,我们这里就只得到最匹配的那一项
                    text += results.get(0).text;
                    System.out.println(text);
                }
    
            }
    
            // 首先迭代结果,然后获取每个结果,并进行对比,如果包含有特定字符串,那么就执行相应Intent跳转。
            // 注意 凡是Intent能办到的(发邮件,跳到已安装应用,拨号,发短信,发彩信,浏览网页,播放多媒体。。。。),它就都能办到。
            private void doVoice(ArrayList<RecognizerResult> results) {
                Intent i = new Intent();
                for (RecognizerResult result : results) {
                    if (result.text.contains("天气")) {
                        // 天气界面的跳转
                        i.setClass(VoiceRecognize.this, Weather.class);
                        startActivity(i);
                    } else if (result.text.contains("QQ")) {
                        // 跳转到QQ
                    	openApp("com.tencent.mobileqq");//QQ的包名
                    } else if (result.text.contains("短信")) {
                        // 短信界面的跳转
                        i.setAction(Intent.ACTION_VIEW);
                        i.setType("vnd.android-dir/mms-sms");
                        startActivity(i);
                    } else {
                        // 如果没有相应指令就用Toast提示用户
                        Toast.makeText(VoiceRecognize.this, "无法识别",Toast.LENGTH_SHORT).show();
                    }
                }
    
            }
    
            @Override
            public void onEnd(SpeechError error) {
                if (error == null) {
                    // 完成后就把结果显示在EditText上
                    et.setText(text);
                }
            }
        };
    
    }
    
    

    demo里面的Wether是要跳转的acticity,当语言识别监听器接收到“天气”时会跳转到wether界面。

    package com.demo.voice;
    
    import sina.CreAmazing.voice.R;
    import android.app.Activity;
    import android.os.Bundle;
    
    public class Weather extends Activity {
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		// TODO Auto-generated method stub
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.weather);
    	}
    }
    
    
    • 下面是xml文件
      wether.xml:这是wether界面
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical" 
        android:background="#F5F5DC">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Weather"
            android:textSize="70dp" 
            android:textColor="#FF1493"/>
    </LinearLayout>
    

    main.xml:这是主界面

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <EditText
            android:id="@+id/et"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:editable="true" />
    
        <Button
            android:id="@+id/bt_recognize"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Recognize" />
    
        <Button
            android:id="@+id/bt_speek"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Speek" />
    
        <Button
            android:id="@+id/bt_speek_bg"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Speek-Background" />
    
        <TextView
            android:textColor="@android:color/white"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="语音控制开关" />
    
        <ToggleButton
            android:id="@+id/tb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    

    AndroidManifest.xml:里面有权限获取以及activity的注册

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="sina.CreAmazing.voice"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name="com.demo.voice.VoiceRecognize"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <activity android:name="com.demo.voice.Weather" >
            </activity>
            <activity android:name="com.demo.voice.News" >
            </activity>
        </application>
    
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <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" />
    
    </manifest>
    
    

    ##三、功能简介
    安装到手机上后,进入应用会朗读文本“hello world”;
    可以看到有四个按钮,点击第一个按钮会启动语音听写并加载到文本框里面,点击第二个按钮会朗读文本框里面输入的文本,点击第三个按钮能在后台朗读,点击最后一个按钮可以开关语音控制,语音控制开启后识别到“QQ”,“短信”会打开相应的应用,识别到“天气”会跳转到wether界面;

    展开全文
  • 讯飞语音官方自带demo导入android studio中经常报各种各样的错,上传的资源中往往很多都不能跑.....将资源中的id值改成自己的,把自己下载下来的libs里面的资源替换成自己就可以,或者参考我的项目结构,聪明如你...
  • 基于讯飞语音识别Demo

    2020-06-03 23:33:26
    基于讯飞语音转文字,原来的那个包被下载次数太多分数已经超高了,所以新发一版,内容一样
  • 讯飞语音 使用步骤(针对androidStudio):语音转文字
    展开全文
  • 准备工作1.... 2.右上角进入控制台,按照说明创建一个应用,该应用名就叫HITOSLabTest(与android studio的...3.点击HITOSLabTest后面的“开通服务”按钮,开通服务—>语音听写,进入语音听写—>下载当前应用对应的SDK;
  • 讯飞语音识别最简demo

    2020-06-07 20:22:59
    安卓讯飞语音识别最简demo实现,只有语音识别功能,可以作为参考
  • Unity+讯飞语音识别

    2020-06-09 09:52:52
    Unity结合讯飞语音识别Demo,在线识别,给需要的朋友
  • “人工智能”是今年比较火的一个名词,甚至大多数人认为“人工智能”是继“IT互联网... 那么,如何在Android项目里集成讯飞语音识别与合成呢? 首先在讯飞语音的开发平台网址:http://www.xfyun.cn/ ,然后在平台注册
  • 讯飞语音识别demo实现

    2019-11-15 14:17:32
    最近看了看百度语音和讯飞语音识别的实现,吐个槽,他们的官方文档是真的写得垃圾,可能是我技术不到位, 反正我是很难看懂的,不吐槽了,先上实现 讯飞的官方文档 ...
  • 最近项目集成了讯飞语音识别功能,由此记录简单的集成流程 demo效果(logcat) 资源下载 https://download.csdn.net/download/qq_38355313/10358546 1、首先用as建一个model (这个不用介绍) 2、登录...
  • 这次说说Unity上的语音识别,使用的是讯飞语音识别的SDK,目标平台是安卓客户端 在写文章之前,参考了讯飞官方论坛给出的Unity结合讯飞语音识别的案例,参照案例可以很方便的进行语音识别, 文章链接就不贴出来了,...
  • 【由于CSDN的markdown的排版不是很好,所以整理了一下,新的... 公司要在微信小程序上面实现语音识别的功能,后端的踩坑功能就落到了我的头上了。本着好好学习,努力研究的精神,二话不说就接下了这个任务了。 我在
  • Unity 接入讯飞语音识别包,实现语音识别,包含Unity 项目工程和Android安装包
  • 我之前用google的语音识别一直不行,后来才发现我的google语音...经兄弟介绍说,讯飞语音识别相比google更稳定,所以也下载了一个。这里的工程都是网上下载的,为了以后方便找,所以上传一下,不要炮轰我哦~~~呵呵~~~
  • 讯飞语音识别:使用注意事项:mainfest.xml中一定要记得权限写进去21001:我的情况是没有写SpeechApp类,并且需要在application中注册;20005:无匹配结果23300:本地引擎错误,,我的问题是在于语法错误,少了一个分号...
  • 前段时间写了一个关于百度语音唤醒文章,最近有做了一个讯飞语音的应用,在这里把学习的资料整理一下。 唤醒的整个过程如下: (图源自讯飞官网) 讯飞的语音唤醒功能实现起来挺方便的(相比百度,百度语音...
  • 集成语音识别的过程中,语音识别的那个RecognizerDialog下面有 “语音识别能力由讯飞输入法提供”看着很别扭, 想去掉或者完全使用自定义的View,研究了一波。RecognizerDialog自定义view需要先看官方直接提供demo里...
1 2 3 4 5 ... 20
收藏数 1,270
精华内容 508