創(chuàng)建應(yīng)用
在百度AI開放平臺(http://ai.baidu.com/)創(chuàng)建應(yīng)用监婶,選擇語音識別接口
SDK下載
導(dǎo)入jar包和so庫文件
(1)將DEMO中的/app/libs文件夾下的jar包拷到自己項目的/app/libs文件夾下,之后右鍵jar包,選擇add as library即可嘉抓。
(2)在自己項目中的/app/src/main下新建jniLibs文件夾,將DEMO中一樣路徑下的所有文件拷過去告材。
相關(guān)配置
1.AndroidManifest添加權(quán)限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.設(shè)置APP_ID, APP_KEY, APP_SECRET和服務(wù)
<meta-data android:name="com.baidu.speech.APP_ID"
android:value="11547547" />
<meta-data
android:name="com.baidu.speech.API_KEY"
android:value="RXM9tKXffawbWOeVXxNO0it9" />
<meta-data
android:name="com.baidu.speech.SECRET_KEY"
android:value="l8jO7oGPqVbj3BkMexFuu36C9Ap2hz5N" />
<service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" />
3.android 6.0 以上版本權(quán)限申請
/**
* android 6.0 以上需要動態(tài)申請權(quán)限
*/
private void initPermission() {
String permissions[] = {Manifest.permission.RECORD_AUDIO,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.INTERNET,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
ArrayList<String> toApplyList = new ArrayList<String>();
for (String perm :permissions){
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
//進入到這里代表沒有權(quán)限.
}
}
String tmpList[] = new String[toApplyList.size()];
if (!toApplyList.isEmpty()){
ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// 此處為android 6.0以上動態(tài)授權(quán)的回調(diào)齿拂,用戶自行實現(xiàn)。
}
4.proguard文件
-keep class com.baidu.speech.**{*;}
開始使用
1.初始化EventManager
EventManager eventManager = EventManagerFactory.create(this,"asr");
2.創(chuàng)建自己的事件監(jiān)聽EventListener孩等,在onEvent里做各種回調(diào)處理艾君。其中s是回調(diào)事件, s1是回調(diào)參數(shù)肄方。(data冰垄,offset,length)緩存臨時數(shù)據(jù)权她,三者一起虹茶,生效部分為 data[offset] 開始,長度為length隅要。
我們通過判斷s的值來確定語音回調(diào)蝴罪,如開始識別,識別結(jié)束等
com.baidu.speech.EventListener eventListener = new com.baidu.speech.EventListener() {
@Override
public void onEvent(String s, String s1, byte[] data, int offset, int length) {
if(s == SpeechConstant.CALLBACK_EVENT_ASR_READY){
Log.i("TAG","start:"+s1);
info.setText(s+"\n"+s1);
}
if(s == SpeechConstant.CALLBACK_EVENT_ASR_BEGIN){
info.setText(s+"\n"+s1);
}
if(s == SpeechConstant.CALLBACK_EVENT_ASR_END){
info.setText(s+"\n"+s1);
}
if(s == SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL){
//TODO
}
}
};
3.注冊自己的監(jiān)聽
eventManager.registerListener(eventListener);
4.發(fā)送事件
通過EventManager的send()方法可以發(fā)送各種事件步清。如開始識別洲炊,停止識別,取消識別等尼啡。在SpeechConstnt類中有靜態(tài)常量讓我們選用暂衡。
第一個參數(shù)為事件類型,第二個參數(shù)為語音識別相關(guān)參數(shù)設(shè)定崖瞭,格式為JSON狂巢。
比如我們可以在點擊一個按鈕后執(zhí)行下述代碼。
eventManager.send(SpeechConstant.ASR_START,jsonObject.toString(),null,0,0);
總結(jié)
簡單使用流程就是先進行EventManager和EventListener初始化书聚,之后EventManager注冊EventListener唧领,然后調(diào)用EventManager的send()方法執(zhí)行開始識別、結(jié)束識別等事件雌续。最后在EventListener中的onEvent()方法中進行開始識別斩个、識別結(jié)果各種回調(diào)處理