在配置好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;