场景:在aidl远程服务里做语音业务
1、我在官方demo里,新建一个aidl 文件
// IVoice.aidl
package com.baidu.speech.recognizerdemo;
interface IVoice {
void startRecord(String aString);
}
2、接着新建一个远程服务,该服务里只实现一个开启语音识别的函数,函数名为startRecord,这个函数调用官方demo中的start():
public class VoiceIIService extends Service implements EventListener {
private static final String TAG = "VoiceIIService";
private IVoiceImp voiceImp;
private EventManager asr;
public class IVoiceImp extends IVoice.Stub {
@Override
public void startRecord(String aString) throws RemoteException {
Log.i(TAG, "startRecord: 。。。。。。。aString= "+aString);
start();
}
}
public void start() {
asr.registerListener(this);
Map params = new LinkedHashMap();
String event = null;
event = SpeechConstant.ASR_START; // 替换成测试的event
// 基于SDK集成2.1 设置识别参数
params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, false);
// params.put(SpeechConstant.NLU, "enable");
// params.put(SpeechConstant.VAD_ENDPOINT_TIMEOUT, 0); // 长语音
// params.put(SpeechConstant.IN_FILE, "res:///com/baidu/android/voicedemo/16k_test.pcm");
// params.put(SpeechConstant.VAD, SpeechConstant.VAD_DNN);
// params.put(SpeechConstant.PID, 1537); // 中文输入法模型,有逗号
/* 语音自训练平台特有参数 */
// params.put(SpeechConstant.PID, 8002);
// 语音自训练平台特殊pid,8002:搜索模型类似开放平台 1537 具体是8001还是8002,看自训练平台页面上的显示
// params.put(SpeechConstant.LMID,1068); // 语音自训练平台已上线的模型ID,https://ai.baidu.com/smartasr/model
// 注意模型ID必须在你的appId所在的百度账号下
/* 语音自训练平台特有参数 */
// 请先使用如‘在线识别’界面测试和生成识别参数。 params同ActivityRecog类中myRecognizer.start(params);
String json = null; // 可以替换成自己的json
json = new JSONObject(params).toString(); // 这里可以替换成你需要测试的json
asr.send(event, json, null, 0, 0);
}
@Override
public void onCreate() {
super.onCreate();
asr = EventManagerFactory.create(this, "asr");
Log.i(TAG, "onCreate:远程服务-voiceservice---------creat ");
}
3、新建一个demo 作为aidl客户端,在客户端只作绑定上说的远程服务VoiceIIService,然后调用他的startrecord方法。
客户端aidl文件:(与远程服务端一致)
绑定服务--调用服务里的方法
Intent intent = new Intent();
intent.setAction("com.baidu.aip.asrwakeup3.VoiceIIService");
intent.setPackage("com.baidu.speech.recognizerdemo");
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
@Override
public void onClick(View v) {
if (v == start) {
if (iVoice != null) {
try {
iVoice.startRecord("test record");
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
收藏
点赞
0
个赞
请登录后评论
TOP
切换版块
帖子篇幅有限。问题是按照官方流程使用demo一切正常,如果在aidl中调用原本一样的代码则不能正常使用,报权限错误。
这是啥问题.没看到问题描述呢.
这个问题已经在qq群里和您沟通过了的,如果还有问题,请继续和群里的管理员沟通。