因為該項目不適合圖形展示贰镣,所以無圖
需要使用錄音功能,那么虛擬機是不行的治宣,只能使用真機測試
集成到項目中怕享,需要將訊飛SDK里的內容搬到項目對應位置
項目結構.png
在AndroidMainfest.xml中添加相應權限,安卓多少版本需要在代碼中動態(tài)獲取權限尾抑,此配置無效歇父。
<!--連接網絡權限,用于執(zhí)行云端語音能力 -->
<uses-permission android:name="android.permission.INTERNET" />
<!--獲取手機錄音機使用權限再愈,聽寫榜苫、識別、語義理解需要用到此權限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--讀取網絡信息狀態(tài) -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--獲取當前wifi狀態(tài) -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允許程序改變網絡連接狀態(tài) -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<!--讀取手機信息權限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--讀取聯(lián)系人權限践磅,上傳聯(lián)系人需要用到此權限 -->
<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"
tools:ignore="ProtectedPermissions" />
<!--手機定位信息羔飞,用來為語義等功能提供定位,提供更精準的服務--> <!--定位信息是敏感信息
檐春,可通過Setting.setLocationEnable(false)關閉定位請求 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
在build.gradle中填加依賴
dependencies {
implementation files('libs\\Msc.jar')
compile 'com.google.code.gson:gson:2.2.4'
}
在項目初始化時初始化訊飛工具逻淌。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
checkPermission();
//建議在創(chuàng)建時添加,xxxxx為對應的訊飛appId
SpeechUtility.createUtility(this, SpeechConstant.APPID + "=xxxxxx");
}
隨意在頁面上添加一個按鈕疟暖,然后綁定監(jiān)聽事件
bnt_video =findViewById(R.id.bnt_video);
bnt_video.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
initSpeech();
}
});
/**
* 初始化語音識別
*/
public void initSpeech() {
// 語音配置對象初始化
// SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(NoteEdit.this, null);
//1.創(chuàng)建RecognizerDialog對象
RecognizerDialog mDialog = new RecognizerDialog(NoteEdit.this, null);
// 2.設置聽寫參數卡儒,詳見《科大訊飛MSC API手冊(Android)》SpeechConstant類
// mIat.setParameter(SpeechConstant.DOMAIN, "iat"); // domain:域名
// mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
// mIat.setParameter(SpeechConstant.ACCENT, "mandarin"); // mandarin:普通話
//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());
et_content.setText(result);
//獲取焦點
et_content.requestFocus();
//將光標定位到文字最后俐巴,以便修改
et_content.setSelection(result.length());
}
}
@Override
public void onError(SpeechError speechError) {
}
});
//4.顯示dialog骨望,接收語音輸入
mDialog.show();
}
/**
* 解析語音json
*/
public static 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;
}
}
技術難點:
android 64位機子兼容32位so包的操作
https://blog.csdn.net/qq_35534596/article/details/78010172