From ac53fa1f863ea46f5462128581b59a18eec00392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Mon, 20 Apr 2026 09:55:56 +0800 Subject: [PATCH] =?UTF-8?q?feat(asr):=20=E6=B7=BB=E5=8A=A0=E6=97=A0?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E7=8A=B6=E6=80=81=E4=B8=8B=E7=9A=84=E8=AF=AD?= =?UTF-8?q?=E9=9F=B3=E5=91=BD=E4=BB=A4=E5=A4=84=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在AsrHelper中新增Intent和WelcomeActivity导入 - 引入exitProcess用于应用退出功能 - 修改无网络对话框标题和消息内容 - 添加handleNoNetworkDialogCmd方法处理"退出"和"返回"语音命令 - 实现语音命令触发的应用退出和返回欢迎页面功能 - 在WelcomeActivity中注释掉triggerRecognize调用 --- .../com/nova/brain/glass/helper/AsrHelper.kt | 35 +++++++++++++++++-- .../nova/brain/glass/ui/WelcomeActivity.kt | 1 + 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt b/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt index b19b5b4..c682e3f 100644 --- a/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt +++ b/app/src/main/java/com/nova/brain/glass/helper/AsrHelper.kt @@ -3,6 +3,7 @@ package com.nova.brain.glass.helper import android.R.attr.action import android.app.AlertDialog import android.content.Context +import android.content.Intent import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.net.ConnectivityManager @@ -14,6 +15,7 @@ import android.view.LayoutInflater import com.nova.brain.glass.BuildConfig import com.nova.brain.glass.R import com.nova.brain.glass.model.RecognizeAction +import com.nova.brain.glass.ui.WelcomeActivity import com.rokid.online.speech.AsrClient import com.rokid.online.speech.OnlineSpeechSdk import com.rokid.online.speech.OnlineSpeechSdkConfig @@ -22,6 +24,7 @@ import com.rokid.online.speech.open.AndroidPcmTtsStreamPlayer import com.rokid.online.speech.open.OpenSdkAudioSource import com.xuqm.base.common.AppManager import com.xuqm.base.extensions.showMessage +import kotlin.system.exitProcess object AsrHelper : OfflineCmdListener { @@ -190,8 +193,8 @@ object AsrHelper : OfflineCmdListener { ?: return@post if (activity.isFinishing || activity.isDestroyed) return@post noNetworkDialog = AlertDialog.Builder(activity) - .setTitle("网络异常") - .setMessage("当前无网络,请检查网络连接") + .setTitle("当前无网络,请检查网络连接") + .setMessage("语音输入“退出”,退出应用。或者输入“返回”,返回初始页面。") .setCancelable(false) .create() .also { it.show() } @@ -315,6 +318,7 @@ object AsrHelper : OfflineCmdListener { // 离线关键词回调:唤醒词触发时先 TTS 播报,播报结束后启动麦克风 override fun onOfflineCmd(cmd: String) { + if (handleNoNetworkDialogCmd(cmd)) return if (cmd == WAKE_WORD || cmd == WAKE_WORD1 || cmd == "C大脑") { Log.d(TAG, "Wake word triggered") if (!isNetworkAvailable()) { @@ -332,6 +336,33 @@ object AsrHelper : OfflineCmdListener { } } + private fun handleNoNetworkDialogCmd(cmd: String): Boolean { + if (cmd != "退出" && cmd != "返回" && cmd != "退回") return false + mainHandler.post { + if (noNetworkDialog?.isShowing != true) return@post + mainHandler.removeCallbacks(networkCheckRunnable) + dismissNoNetworkDialog() + val activity = runCatching { AppManager.getInstance().getActivity() }.getOrNull() + ?: return@post + when (cmd) { + "退出" -> { + activity.finishAffinity() + exitProcess(0) + } + "返回", "退回" -> { + activity.startActivity( + Intent(activity, WelcomeActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + } + ) + } + } + } + return true + } + fun close() { OfflineCmdServiceHelper.removeOnLineListener(this) mainHandler.removeCallbacks(networkCheckRunnable) diff --git a/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt index 2352f9b..e889159 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/WelcomeActivity.kt @@ -55,6 +55,7 @@ class WelcomeActivity : BaseActivity() { window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) binding.tv.setOnClickListener { runWithNetwork { +// triggerRecognize() startActivity(Intent(this, TaskListActivity::class.java)) } }