概述
目录
一、问题重现
二、原因分析
三、解决方法
在集成讯飞语音识别SDK过程中,遇到了“SpeechRecognizer.createRecognizer()获取的SpeechRecognizer对象为null”的问题,上网百度,有的说是权限没给,还有的说是没联网等等,但都没有解决问题,后来一番折腾捣鼓,找到了原因以及解决方案。
一、问题重现
1、下载完SDK解压后,有如图所示的文件。其中lIbs目录下的.so库和Jar包是我在项目中需要集成的,于是我直接将libs目录下的文件拷贝到了项目的libs目录下。
2、然后在运行获取SpeechRecognizer对象时,却是null的。初始化代码以及log打印结果如下图。
/** * 初始化语音识别对象 */ private void initVoiceRecognize() { //获取系统默认语言 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { locale = LocaleList.getDefault().get(0); } else { locale = Locale.getDefault(); } language = locale.getLanguage() + "-" + locale.getCountry(); Log.d(TAG, "系统默认language:"+language); // 初始化识别无UI识别对象 //使用SpeechRecognizer对象,可根据回调消息自定义界面; speechRecognizer = SpeechRecognizer.createRecognizer(MainActivity.this, initListener); if(speechRecognizer != null) { //设置返回结果格式,目前支持json,xml以及plain 三种格式,其中plain为纯听写文本内容 speechRecognizer.setParameter(SpeechConstant.RESULT_TYPE, "plain"); // 设置语音前端点:静音超时时间,单位ms,即用户多长时间不说话则当做超时处理 //取值范围{1000~10000} speechRecognizer.setParameter(SpeechConstant.VAD_BOS, "4000"); //设置语音后端点:后端点静音检测时间,单位ms,即用户停止说话多长时间内即认为不再输入, //自动停止录音,范围{0~10000} speechRecognizer.setParameter(SpeechConstant.VAD_EOS, "1000"); //设置语音输入语言,zh_cn为简体中文,en_us为美式英文 if (language.equalsIgnoreCase("zh-CN")) { // 设置语言 speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "zh_cn"); } else { // 设置语言 speechRecognizer.setParameter(SpeechConstant.LANGUAGE, "en_us"); } Log.d(TAG, "语音识别对象完成初始化"); }else{ Log.d(TAG, "语音识别对象 == null"); } }
二、原因分析
在Android Studio中,引用.so库,会默认匹配main下的jniLibs目录,如果没有jniLibs目录需要自己手动创建,把.so库放到jniLibs目录下。
如果想在Android Studio中使用libs下的库,则需要手动去指定库的位置。
注意:两种方式引入.so库,库的名称都不能随便更改。
三、解决方法
1、方法一:语音识别SDK中的.so库和Jar包直接放在项目的libs目录下,同时在build.gradle文件中手动去指定库的位置。
android { ...... //Android Studio中,使用libs下的.so库,需要手动去指定库的位置 sourceSets { main { jniLibs.srcDirs = ['libs'] } } }
2、方法二:在main目录下新建jniLibs目录,然后分别将语音识别SDK中的Jar包直接放在项目的libs目录下,.so库放到jniLibs目录下。
好了,终于解决完这个问题了。最后附上一篇对解决该问题有启发作用的博客。
Android关于libs,jniLibs库的基本使用说明及冲突解决
最后
以上就是谨慎小猫咪为你收集整理的【Android】科大讯飞——语音识别 解决"SpeechRecognizer.createRecognizer()获取的SpeechRecognizer对象为null"问题的全部内容,希望文章能够帮你解决【Android】科大讯飞——语音识别 解决"SpeechRecognizer.createRecognizer()获取的SpeechRecognizer对象为null"问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复