创建应用
在百度AI开放平台(http://ai.baidu.com/)创建应用,选择语音识别接口
SDK下载
导入jar包和so库文件
(1)将DEMO中的/app/libs文件夹下的jar包拷到自己项目的/app/libs文件夹下,之后右键jar包,选择add as library即可。
(2)在自己项目中的/app/src/main下新建jniLibs文件夹,将DEMO中一样路径下的所有文件拷过去。
相关配置
1.AndroidManifest添加权限
2.设置APP_ID, APP_KEY, APP_SECRET和服务
3.android 6.0 以上版本权限申请
/**
* android 6.0 以上需要动态申请权限
*/
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 toApplyList = new ArrayList();
for (String perm :permissions){
if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
toApplyList.add(perm);
//进入到这里代表没有权限.
}
}
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以上动态授权的回调,用户自行实现。
}
4.proguard文件
-keep class com.baidu.speech.**{*;}
开始使用
1.初始化EventManager
EventManager eventManager = EventManagerFactory.create(this,"asr");
2.创建自己的事件监听EventListener,在onEvent里做各种回调处理。其中s是回调事件, s1是回调参数。(data,offset,length)缓存临时数据,三者一起,生效部分为 data[offset] 开始,长度为length。
我们通过判断s的值来确定语音回调,如开始识别,识别结束等
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.注册自己的监听
eventManager.registerListener(eventListener);
4.发送事件
通过EventManager的send()方法可以发送各种事件。如开始识别,停止识别,取消识别等。在SpeechConstnt类中有静态常量让我们选用。
第一个参数为事件类型,第二个参数为语音识别相关参数设定,格式为JSON。
比如我们可以在点击一个按钮后执行下述代码。
eventManager.send(SpeechConstant.ASR_START,jsonObject.toString(),null,0,0);
总结
简单使用流程就是先进行EventManager和EventListener初始化,之后EventManager注册EventListener,然后调用EventManager的send()方法执行开始识别、结束识别等事件。最后在EventListener中的onEvent()方法中进行开始识别、识别结果各种回调处理