androidsdk 在aidl 里的问题
bdwk_dwy 发布于2019-06 浏览:1471 回复:3
0
收藏

场景:在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
个赞
共3条回复 最后由用户已被禁言回复于2022-04
#4bdwk_dwy回复于2019-07
#3 卡农LLLL回复
这是啥问题.没看到问题描述呢.

帖子篇幅有限。问题是按照官方流程使用demo一切正常,如果在aidl中调用原本一样的代码则不能正常使用,报权限错误。

0
#3卡农LLLL回复于2019-06

这是啥问题.没看到问题描述呢.

0
#2用户已被禁言回复于2019-06

这个问题已经在qq群里和您沟通过了的,如果还有问题,请继续和群里的管理员沟通。

0
TOP
切换版块