科大訊飛語音聽寫SDK的使用,實作語音識别功能
事先說明:
語音聽寫SDK适配安卓6.0需要手動申請權限,各位可以自信查詢資料實作,如果嫌麻煩,可以用第三方Bmob內建好的工具類進行實作,詳細可以看http://blog.csdn.net/qq_30379689/article/details/52223244,關于語音聽寫SDK的開發,參考科大訊飛開放平台官網為準
步驟一:百度科大訊飛開發者平台,找到官網進入
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TO5IDMzcjMzIzNxkDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
步驟二:在科大訊飛開發者平台官網新增賬號,并建立應用
步驟三:在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);
// 将“12345678”替換成您申請的 APPID
SpeechUtility.createUtility(this, SpeechConstant.APPID +"=12345678");
}
步驟八:在代碼中封裝語音識别實體,然後封裝個方法使用
/**
* 初始化語音識别
*/
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) {
//解析語音
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這個包進行解析,需要在dependencies中添加
compile 'com.google.code.gson:gson:2.2.4'
步驟九:我們用一個按鈕調用這個initSpeech方法,并将結果顯示在TextView中,檢視效果圖
源碼下載下傳:使用Import Module導入