在配置好Android Studio 2.3.3后,依照结合网上例子,动手建立讯飞语言听写app,最终手机上运行成功。前端
主要参考两篇博文(zqHero/XunFeiVoiceDEmo ,Android Studio 2.3.3 接入讯飞语音接口),都很是好,基本步骤参考第一篇,代码参考第二篇。java
建立讯飞应用:在讯飞开发平台注册帐号,在网站上建立应用,获得一个APPID,这个ID用来绑定讯飞SDK和本身制做的APPandroid
建立SDK:选择所需服务(如语言听写)、平台(Android)、和应用(第一步建立的应用),而后下载该SDK。SDK主要有三个文件夹,/assets,/libs,/sample.git
建立android Studio项目:新建项目,修改项目名(如VoiceDemo)后其他都为默认,建立一个helloworld项目,文件浏览方式默认为Android,改成Project方式。github
复制.jar文件:将SDK中/libs文件夹中的.jar文件都复制到android项目VoiceDemo/app/libs/文件夹下。可能因为生成SDK时只选择语言听写,只有两个.jar文件(分别为Msc.jar,Sunflower.jar)编程
复制.so文件:先在android项目VoiceDemo/app/src/main/下新建文件夹/jniLibs,将SDK中/libs下的包含.so文件夹所有复制到VoiceDemo/app/src/main/jniLibs/文件夹下。总共七个文件夹分别是/arm64-v8a,/armeabi,/armeabi-v7a,/mips,/mips64,/x86,/86_64,每一个文件夹下都只有一个名为libmsc.so的文件json
复制/assets文件夹:将SDK中/assets文件夹复制到VoiceDemo/app/src/main/下后端
刷新.gradle文件:选中VoiceDemo/app下的build.gradle,右键选择Synchronize 'build.gradle',依次刷新其它两个.gradle文件。工具栏中也有Synch Project with Gradle Files*可能达到一样效果。在这一步中.gradle中没有出现文章二中的代码,我也没有手动添加,但好像影响不大。初次接触Android编程,不懂原理,但愿热心人解答。网络
编辑权限:在*VoiceDemo/app/src/main/AndroidManifest.xml文件中依照第二篇文章代码添加相应权限;app
编辑布局:在*VoiceDemo/app/src/main/res/layout/activity_main.xml文件中依照第二篇文章添加按钮和文本框
编辑功能:在*VoiceDemo/app/src/main/java/example.org.voicedemo/MainActivity.java文件中依照第二篇文章添加给按钮添加功能,将在讯飞平台建立获得的APPID添加进去。在这一步时import com.iflytek包所有显示有红色下划线,提示找不到com.iflytek。我将项目关闭后从新打开红色下划线就不存在了。这个bug出现的很奇怪,解决的也很奇怪。但愿有热心人解答。
Run app:选择在模拟其中运行,可以显示主页面布局,点击按钮录音时提示权限不对,但却没有赞成权限的选择弹出。选择在手机中安装运行,报错-26.
打包生成APK:在Build工具选项下选择Build APK将生成的APK拷贝到手机中安装,赞成相应权限后,语音听写功能正常运行。如第二篇文章。
项目文件的代码:
AndroidManifest.xml
activity_main.xml
MainActivity.java
package example.org.voicedemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.iflytek.cloud.RecognizerResult;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
public class MainActivity extends AppCompatActivity {
private SpeechRecognizer mIat;
private RecognizerDialog mIatDialog;
private RecognizerDialogListener mRListener;
private Button button;
private TextView tv;
private String result;