百度语音识别简单快速集成
> 下载SDK包: http://yuyin.baidu.com/sdk/down?appId=10094475
解压压缩包,会得到一个AS项目,导入AS项目,编译若出现空指针异常,调高最小版本SDK版本:
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 15
targetSdkVersion 25
}
可以正常运行后,在自己的项目中导入该项目的app module,然后修改几个地方就可以用了。
1.gradle的修改:
apply plugin: 'com.android.library'
去掉:applicationId
注释掉:
buildTypes {
release {
// minifyEnabled false
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
}
}
2.AndroidManifest.xml的修改:
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="25" />
android:minSdkVersion="15"
android:targetSdkVersion="25" />
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:label="Tests for com.baidu.speech.recognizerdemo"
android:targetPackage="自己的程序包名" />
<application
>
android:name="android.test.InstrumentationTestRunner"
android:label="Tests for com.baidu.speech.recognizerdemo"
android:targetPackage="自己的程序包名" />
<application
>
<!--
离线功能即离线语法及唤醒词功能开启需要正式授权,正式授权完全由SDK自动管理:
1. 在百度语音开放平台注册应用,http://yuyin.baidu.com/app
2. 给在百度语音开放平台注册应用绑定包名。本demo的包名是com.baidu.speech.recognizerdemo,在build.gradle文件中查看。
3. 在当前应用的AndroidManifest.xml中填写相应的APP_ID API_KEY SECRET_KEY
4. 首次使用联网。正式授权目前有效期三年,三年之后的最后一个月尝试更新正式授权。
另外需要注意的是优先在线识别,即离线语法识别功能在在线(包括2G网络)的情况下自动不启用。。
-->
<!-- 请填写真实的APP_ID API_KEY SECRET_KEY-->
离线功能即离线语法及唤醒词功能开启需要正式授权,正式授权完全由SDK自动管理:
1. 在百度语音开放平台注册应用,http://yuyin.baidu.com/app
2. 给在百度语音开放平台注册应用绑定包名。本demo的包名是com.baidu.speech.recognizerdemo,在build.gradle文件中查看。
3. 在当前应用的AndroidManifest.xml中填写相应的APP_ID API_KEY SECRET_KEY
4. 首次使用联网。正式授权目前有效期三年,三年之后的最后一个月尝试更新正式授权。
另外需要注意的是优先在线识别,即离线语法识别功能在在线(包括2G网络)的情况下自动不启用。。
-->
<!-- 请填写真实的APP_ID API_KEY SECRET_KEY-->
<meta-data
android:name="com.baidu.speech.APP_ID"
android:value="自己的appid" />
<!--android:value="9788136" />-->
<!-- 再次重复!!填写APP_ID 时请检查在官网的该应用内是否设置了包名。否则会导致唤醒词及离线功能无法使用。
本demo的包名是com.baidu.speech.recognizerdemo,在build.gradle文件中查看。 -->
<!-- 正式发布时,请替换成您自己的appId 本demo的appId会不定时下线 -->
<meta-data
android:name="com.baidu.speech.API_KEY"
android:value="自己的appkey" />
<!--android:value="0GjQNO5H4pGPf9HyA3AmZEbz" />-->
<meta-data
android:name="com.baidu.speech.SECRET_KEY"
android:value="自己的select_key" />
<!--android:value="db981ef3ec647ba8a09b599ad7447a24" />-->
<service
android:name="com.baidu.speech.VoiceRecognitionService"
android:exported="false" />
<activity
android:name="com.baidu.android.voicedemo.activity.ActivityMain"
android:configChanges="orientation|keyboardHidden|screenLayout"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.DeviceDefault.Light">
</activity>
。。。
</application>
android:name="com.baidu.speech.APP_ID"
android:value="自己的appid" />
<!--android:value="9788136" />-->
<!-- 再次重复!!填写APP_ID 时请检查在官网的该应用内是否设置了包名。否则会导致唤醒词及离线功能无法使用。
本demo的包名是com.baidu.speech.recognizerdemo,在build.gradle文件中查看。 -->
<!-- 正式发布时,请替换成您自己的appId 本demo的appId会不定时下线 -->
<meta-data
android:name="com.baidu.speech.API_KEY"
android:value="自己的appkey" />
<!--android:value="0GjQNO5H4pGPf9HyA3AmZEbz" />-->
<meta-data
android:name="com.baidu.speech.SECRET_KEY"
android:value="自己的select_key" />
<!--android:value="db981ef3ec647ba8a09b599ad7447a24" />-->
<service
android:name="com.baidu.speech.VoiceRecognitionService"
android:exported="false" />
<activity
android:name="com.baidu.android.voicedemo.activity.ActivityMain"
android:configChanges="orientation|keyboardHidden|screenLayout"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.DeviceDefault.Light">
</activity>
。。。
</application>
最后应该就可以只用了,最好自己再封装一个工具类,将语音识别的环境初始化过程和调用的方法封装进去,使用就更方便了,我自己封装的SpeecherUtils
public class SpeecherUtils {
private static Handler handler;
private static MyRecognizer myRecognizer;
protected static CommonRecogParams apiParams;
private static Context context;
private static MyRecognizer myRecognizer;
protected static CommonRecogParams apiParams;
private static Context context;
public static void init(Context context){
// apiParams = new OnlineRecogParams((Activity) context);
SpeecherUtils.context = context;
KLog.init(true);
apiParams = new OfflineRecogParams( context);
handler = new Handler() {
// apiParams = new OnlineRecogParams((Activity) context);
SpeecherUtils.context = context;
KLog.init(true);
apiParams = new OfflineRecogParams( context);
handler = new Handler() {
/*
* @param msg
*/
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
KLog.e(msg.obj.toString() );
}
* @param msg
*/
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
KLog.e(msg.obj.toString() );
}
};
IRecogListener listener = new MessageStatusRecogListener(handler);
// 可以传入IRecogListener的实现类,也可以如SDK,传入EventListener实现类
// 如果传入IRecogListener类,在RecogEventAdapter为您做了大多数的json解析。
myRecognizer = new MyRecognizer(context, listener); // this是Activity或其它Context类
myRecognizer.loadOfflineEngine(OfflineRecogParams.fetchOfflineParams());
}
public static void start(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
Map<String, Object> params = apiParams.fetch(sp);
myRecognizer.start(params);
KLog.e("start");
}
public static void stop(){
myRecognizer.stop(); // 发送停止录音事件,提前结束录音等待识别结果
IRecogListener listener = new MessageStatusRecogListener(handler);
// 可以传入IRecogListener的实现类,也可以如SDK,传入EventListener实现类
// 如果传入IRecogListener类,在RecogEventAdapter为您做了大多数的json解析。
myRecognizer = new MyRecognizer(context, listener); // this是Activity或其它Context类
myRecognizer.loadOfflineEngine(OfflineRecogParams.fetchOfflineParams());
}
public static void start(){
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
Map<String, Object> params = apiParams.fetch(sp);
myRecognizer.start(params);
KLog.e("start");
}
public static void stop(){
myRecognizer.stop(); // 发送停止录音事件,提前结束录音等待识别结果
}
public static void cancle(){
myRecognizer.cancel(); // 取消本次识别,取消后将立即停止不会返回识别结果
}
public static void destory(){
context=null;
myRecognizer.release();
}
public static void cancle(){
myRecognizer.cancel(); // 取消本次识别,取消后将立即停止不会返回识别结果
}
public static void destory(){
context=null;
myRecognizer.release();
}
}