Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 170|回复: 0

测试中想要多次获得onMessage(String message) 的message信息

[复制链接]

426

主题

598

帖子

3491

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3491
发表于 2025-11-7 02:18:07 | 显示全部楼层 |阅读模式
要在测试中捕获多次 onMessage 调用,需要修改回调处理机制。以下是几种解决方案:
方案一:修改回调接口以收集所有消息
  1. // 修改 RecognitionCallback 接口
  2. interface RecognitionCallback {
  3.     void onGettingMsg(String result);
  4.     void onError(String error);
  5.     void onMessageReceived(String message); // 新增方法用于捕获所有消息
  6. }

  7. // 修改 MyRecognitionCallback 实现
  8. class MyRecognitionCallback implements RecognitionCallback {
  9.     private static final String tag = "AudioSocketCallback";
  10.     private List<String> receivedMessages = new ArrayList<>(); // 存储所有接收到的消息

  11.     @Override
  12.     public void onGettingMsg(String result) {
  13.         Log.d(tag, "Recognition result: " + result);
  14.     }

  15.     @Override
  16.     public void onError(String error) {
  17.         Log.e(tag, "Recognition error: " + error);
  18.     }
  19.    
  20.     @Override
  21.     public void onMessageReceived(String message) {
  22.         receivedMessages.add(message);
  23.         Log.d(tag, "Message received: " + message);
  24.     }
  25.    
  26.     public List<String> getReceivedMessages() {
  27.         return receivedMessages;
  28.     }
  29. }
复制代码
二:在 AudioSocketClient 中修改 onMessage 方法
  1. @Override
  2. public void onMessage(String message) {
  3.     Log.i(tag, "Received message: " + message);
  4.    
  5.     // 通知回调所有接收到的消息
  6.     if (mCallBack != null) {
  7.         // 如果回调实现了新方法,则调用
  8.         try {
  9.             RecognitionCallback callback = (RecognitionCallback) mCallBack;
  10.             callback.onMessageReceived(message);
  11.         } catch (Exception e) {
  12.             // 忽略,保持原有逻辑
  13.         }
  14.     }
  15.    
  16.     // 检查是否为EOF回执
  17.     if (message.contains("eof") || message.contains("result")) {
  18.         if (mCallBack != null) {
  19.             mCallBack.onGettingMsg(message);
  20.         }
  21.     } else {
  22.         // 处理其他消息
  23.         if (message.contains("text") || message.contains("partial")){
  24.             if (mCallBack != null) {
  25.                 mCallBack.onGettingMsg(message);
  26.             }
  27.         }
  28.     }
  29. }
复制代码
方案三:在测试中直接设置回调处理
  1. // 在测试代码中
  2. List<String> receivedMessages = new ArrayList<>();
  3. CountDownLatch messageLatch = new CountDownLatch(1);

  4. client.setRecognitionCallback(new MyRecognitionCallback() {
  5.     @Override
  6.     public void onGettingMsg(String result) {
  7.         super.onGettingMsg(result);
  8.         receivedMessages.add(result);
  9.         // 如果收到期望的结果,计数器减1
  10.         if (result.contains("nine oh two one oh")) {
  11.             messageLatch.countDown();
  12.         }
  13.     }
  14.    
  15.     @Override
  16.     public void onError(String error) {
  17.         super.onError(error);
  18.         Log.e("Test", "Error: " + error);
  19.     }
  20. });

  21. client.connect();
  22. // 等待特定消息或超时
  23. messageLatch.await(60, TimeUnit.SECONDS);
  24. // 检查收集到的所有消息
  25. Log.e("Test", "All received messages: " + receivedMessages);
复制代码
推荐使用方案三,因为它不需要修改现有代码结构,只需要在测试中自定义回调处理逻辑即可。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-12-7 23:12 , Processed in 0.011660 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表