Browse Source

Merge branch 'new_dev' of github.com:deepcloud2048/deep_voice into new_dev

newdev_shunjiawei
lxm 9 months ago
parent
commit
fbe37bc9f6
  1. 45
      lib/modules/home/controllers/home_controller.dart
  2. 3
      lib/modules/home/views/home_view.dart
  3. 15
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt
  4. 25
      local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleAgent.kt
  5. 22
      local_plugins/agent_service/lib/agent_service.dart

45
lib/modules/home/controllers/home_controller.dart

@ -11,6 +11,7 @@ import '../../../data/services/ble_manager.dart';
import '../../../data/services/ota_check_service.dart';
import '../../../data/models/appconfig.dart';
import '../../../data/models/appconfig_model.dart';
import '../../meeting/controllers/meeting_record_controller.dart';
/// 连接状态枚举
enum ConnectionStatus {
@ -118,6 +119,7 @@ class HomeController extends GetxController {
// 中文注释:忽略异常,保持现有状态,避免因类型转换失败导致崩溃
}
});
// 移除了电池信息定时刷新的启动
}
@ -239,13 +241,50 @@ class HomeController extends GetxController {
Get.toNamed(Routes.pairing);
}
void openTranslation() {
AgentService.stopAiSteam();
Get.toNamed(Routes.translationMiddleware);
void openTranslation() async {
AgentService.interruptCurrentResponse();
AgentService.setCanWakeUp(false);
Logger.d(_tag, 'liwei-----------关闭唤醒功能');
await Get.toNamed(Routes.translationMiddleware);
AgentService.setCanWakeUp(true);
Logger.d(_tag, 'liwei-----------打开唤醒功能');
}
/// 打开会议模块
/// 参数:无
/// 返回值:`Future<void>` 无返回数据
/// 异常:不显式抛出;内部仅记录日志
/// 说明:进入会议页前关闭唤醒;返回首页后根据录音状态决定是否开启唤醒(存在录音任务则不启用)
void openMeet() async {
AgentService.interruptCurrentResponse();
AgentService.setCanWakeUp(false);
Logger.d(_tag, 'liwei-----------关闭唤醒功能');
await Get.toNamed(Routes.meeting);
try {
if (Get.isRegistered<MeetingRecordController>()) {
final mrc = Get.find<MeetingRecordController>();
final hasRecording = mrc.isRecording.value ||
mrc.timerStatus.value != TimerStatus.stopped;
if (hasRecording) {
AgentService.setCanWakeUp(false);
Logger.d(_tag, 'openMeet返回:检测到录音任务,保持关闭唤醒功能');
} else {
AgentService.setCanWakeUp(true);
Logger.d(_tag, 'openMeet返回:无录音任务,打开唤醒功能');
}
} else {
AgentService.setCanWakeUp(true);
Logger.d(_tag, 'openMeet返回:未注册MeetingRecordController,默认打开唤醒功能');
}
} catch (e) {
AgentService.setCanWakeUp(true);
Logger.e(_tag, 'openMeet返回:检测录音任务异常,默认打开唤醒功能: $e');
}
}
void exploreAIFeatures() {
Get.toNamed(Routes.agent);
AgentService.interruptCurrentResponse();
}
Future<void> _checkConnectionStatus() async {

3
lib/modules/home/views/home_view.dart

@ -857,7 +857,8 @@ class HomeView extends GetView<HomeController> {
],
),
onTap: () {
Get.toNamed(Routes.meeting);
// Get.toNamed(Routes.meeting);
controller.openMeet();
},
height: 85.h, // 增加高度
isDarkMode: isDarkMode,

15
local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/AgentServicePlugin.kt

@ -330,6 +330,21 @@ class AgentServicePlugin : FlutterPlugin, MethodCallHandler, EventChannel.Stream
}
}
"setCanWakeUp" -> {
try {
val canWakeUp = call.argument<Boolean>("canWakeUp")
if (canWakeUp == null) {
result.error("INVALID_ARGUMENTS", "canWakeUp参数不能为空", null)
return
}
BleAgent.setCanWakeUp(canWakeUp)
result.success(true)
} catch (e: Exception) {
Log.e(TAG, "设置是否可以唤醒失败", e)
result.error("SET_CAN_WAKE_UP_ERROR", "设置是否可以唤醒失败: ${e.message}", null)
}
}
"dispose" -> {
try {
AgentService.dispose()

25
local_plugins/agent_service/android/src/main/kotlin/com/yunqiinnovation/agent_service/BleAgent.kt

@ -18,6 +18,9 @@ object BleAgent : BleService.Callback, AgentServiceListener {
// 是否已注册BLE回调
private var isRegisteredToBle = false
// 是否可以唤醒
private var isCanWakeUp = true
/**
* 初始化语音代理
* @param context 上下文
@ -57,6 +60,14 @@ object BleAgent : BleService.Callback, AgentServiceListener {
}
}
/**
* 设置是否可以唤醒
*/
fun setCanWakeUp(canWakeUp: Boolean) {
Log.d(TAG, "liwei--------------设置是否可以唤醒: $canWakeUp")
isCanWakeUp = canWakeUp
}
/**
* 手动启动语音识别
*/
@ -65,7 +76,7 @@ object BleAgent : BleService.Callback, AgentServiceListener {
Log.e(TAG, "语音代理未初始化")
return false
}
Log.d(TAG, "手动启动语音识别: ")
Log.d(TAG, "手动启动语音识别: $isCanWakeUp")
AgentService.interruptCurrentResponse()
return AgentService.startRecognition(true, "ble_wakeup")
}
@ -142,19 +153,23 @@ Log.d(TAG, "手动启动语音识别: ")
* 在收到唤醒信号时启动语音识别
*/
override fun onWakeupSignalReceived() {
Log.d(TAG, "收到唤醒信号,启动语音识别${AgentService.isRecognitionActive}")
Log.d(TAG, "liwei-------------- 收到唤醒信号,启动语音识别${AgentService.isRecognitionActive}")
if (!isCanWakeUp) {
Log.d(TAG, "liwei-------------- 当前不可以唤醒")
return
}
// 停止当前TTS,避免冲突
AgentService.interruptCurrentResponse()
// AgentService.speakText("我在!")
// 启动语音识别,使用BLE唤醒模式
// 如果已经在识别,则重新启动
//stopListening()
// 如果已经在识别,则重新启动
//stopListening()
//stopListening()
startListening()
startListening()
}
override fun onDeviceInfoReceived(infoType: Int, infoData: Map<String, Any>) {

22
local_plugins/agent_service/lib/agent_service.dart

@ -450,13 +450,9 @@ class AgentService {
/// 停止语音合成和AI流输出
static Future<bool> interruptCurrentResponse() async {
try {
// 首先尝试停止TTS播放
await stopTts();
// 根据原生层的实现,processTextInput可以被用来中断当前的AI流输出
// 这里我们通过发送一个特殊的空字符串来实现这一点
// 然后立即返回true,因为我们不需要真正处理任何文本
return true;
final bool result =
await _channel.invokeMethod('interruptCurrentResponse');
return result;
} on PlatformException catch (e) {
throw AgentServiceException(e.code, e.message ?? '中断响应失败', e.details);
}
@ -524,6 +520,18 @@ class AgentService {
}
}
/// 设置是否可以唤醒
static Future<bool> setCanWakeUp(bool canWakeUp) async {
try {
final bool result = await _channel.invokeMethod('setCanWakeUp', {
'canWakeUp': canWakeUp,
});
return result;
} on PlatformException catch (e) {
throw AgentServiceException(e.code, e.message ?? '设置是否可以唤醒失败', e.details);
}
}
/// 释放资源
static Future<bool> dispose() async {
try {

Loading…
Cancel
Save