|
|
要在测试中捕获多次 onMessage 调用,需要修改回调处理机制。以下是几种解决方案:
方案一:修改回调接口以收集所有消息
- // 修改 RecognitionCallback 接口
- interface RecognitionCallback {
- void onGettingMsg(String result);
- void onError(String error);
- void onMessageReceived(String message); // 新增方法用于捕获所有消息
- }
- // 修改 MyRecognitionCallback 实现
- class MyRecognitionCallback implements RecognitionCallback {
- private static final String tag = "AudioSocketCallback";
- private List<String> receivedMessages = new ArrayList<>(); // 存储所有接收到的消息
- @Override
- public void onGettingMsg(String result) {
- Log.d(tag, "Recognition result: " + result);
- }
- @Override
- public void onError(String error) {
- Log.e(tag, "Recognition error: " + error);
- }
-
- @Override
- public void onMessageReceived(String message) {
- receivedMessages.add(message);
- Log.d(tag, "Message received: " + message);
- }
-
- public List<String> getReceivedMessages() {
- return receivedMessages;
- }
- }
复制代码 二:在 AudioSocketClient 中修改 onMessage 方法
- @Override
- public void onMessage(String message) {
- Log.i(tag, "Received message: " + message);
-
- // 通知回调所有接收到的消息
- if (mCallBack != null) {
- // 如果回调实现了新方法,则调用
- try {
- RecognitionCallback callback = (RecognitionCallback) mCallBack;
- callback.onMessageReceived(message);
- } catch (Exception e) {
- // 忽略,保持原有逻辑
- }
- }
-
- // 检查是否为EOF回执
- if (message.contains("eof") || message.contains("result")) {
- if (mCallBack != null) {
- mCallBack.onGettingMsg(message);
- }
- } else {
- // 处理其他消息
- if (message.contains("text") || message.contains("partial")){
- if (mCallBack != null) {
- mCallBack.onGettingMsg(message);
- }
- }
- }
- }
复制代码 方案三:在测试中直接设置回调处理
- // 在测试代码中
- List<String> receivedMessages = new ArrayList<>();
- CountDownLatch messageLatch = new CountDownLatch(1);
- client.setRecognitionCallback(new MyRecognitionCallback() {
- @Override
- public void onGettingMsg(String result) {
- super.onGettingMsg(result);
- receivedMessages.add(result);
- // 如果收到期望的结果,计数器减1
- if (result.contains("nine oh two one oh")) {
- messageLatch.countDown();
- }
- }
-
- @Override
- public void onError(String error) {
- super.onError(error);
- Log.e("Test", "Error: " + error);
- }
- });
- client.connect();
- // 等待特定消息或超时
- messageLatch.await(60, TimeUnit.SECONDS);
- // 检查收集到的所有消息
- Log.e("Test", "All received messages: " + receivedMessages);
复制代码 推荐使用方案三,因为它不需要修改现有代码结构,只需要在测试中自定义回调处理逻辑即可。
|
|