在配置好Android Studio 2.3.3后,依照結合網上例子,動手創建訊飛語言聽寫app,最終手機上運行成功。
主要參考兩篇博文(zqHero/XunFeiVoiceDEmo ,Android Studio 2.3.3 接入訊飛語音接口),都非常好,基本步驟參考第一篇,代碼參考第二篇。
-
創建訊飛應用:在訊飛開發平台注冊賬號,在網站上創建應用,得到一個APPID,這個ID用來綁定訊飛SDK和自己制作的APP
-
創建SDK:選擇所需服務(如語言聽寫)、平台(Android)、和應用(第一步創建的應用),然后下載該SDK。SDK主要有三個文件夾,/assets,/libs,/sample.
-
創建android Studio項目:新建項目,修改項目名(如VoiceDemo)后其余都為默認,創建一個helloworld項目,文件瀏覽方式默認為Android,改為Project方式。
-
復制.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的文件
-
復制/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文件中依照第二篇文章代碼添加相應權限;
-
編輯布局:在*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;