feat(asr): 添加无网络状态下的语音命令处理功能

- 在AsrHelper中新增Intent和WelcomeActivity导入
- 引入exitProcess用于应用退出功能
- 修改无网络对话框标题和消息内容
- 添加handleNoNetworkDialogCmd方法处理"退出"和"返回"语音命令
- 实现语音命令触发的应用退出和返回欢迎页面功能
- 在WelcomeActivity中注释掉triggerRecognize调用
这个提交包含在:
徐勤民 2026-04-20 09:55:56 +08:00
父节点 562ae7a96a
当前提交 ac53fa1f86
共有 2 个文件被更改,包括 34 次插入2 次删除

查看文件

@ -3,6 +3,7 @@ package com.nova.brain.glass.helper
import android.R.attr.action import android.R.attr.action
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Context import android.content.Context
import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.GradientDrawable import android.graphics.drawable.GradientDrawable
import android.net.ConnectivityManager import android.net.ConnectivityManager
@ -14,6 +15,7 @@ import android.view.LayoutInflater
import com.nova.brain.glass.BuildConfig import com.nova.brain.glass.BuildConfig
import com.nova.brain.glass.R import com.nova.brain.glass.R
import com.nova.brain.glass.model.RecognizeAction 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.AsrClient
import com.rokid.online.speech.OnlineSpeechSdk import com.rokid.online.speech.OnlineSpeechSdk
import com.rokid.online.speech.OnlineSpeechSdkConfig 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.rokid.online.speech.open.OpenSdkAudioSource
import com.xuqm.base.common.AppManager import com.xuqm.base.common.AppManager
import com.xuqm.base.extensions.showMessage import com.xuqm.base.extensions.showMessage
import kotlin.system.exitProcess
object AsrHelper : OfflineCmdListener { object AsrHelper : OfflineCmdListener {
@ -190,8 +193,8 @@ object AsrHelper : OfflineCmdListener {
?: return@post ?: return@post
if (activity.isFinishing || activity.isDestroyed) return@post if (activity.isFinishing || activity.isDestroyed) return@post
noNetworkDialog = AlertDialog.Builder(activity) noNetworkDialog = AlertDialog.Builder(activity)
.setTitle("网络异常") .setTitle("当前无网络,请检查网络连接")
.setMessage("当前无网络,请检查网络连接") .setMessage("语音输入“退出”,退出应用。或者输入“返回”,返回初始页面。")
.setCancelable(false) .setCancelable(false)
.create() .create()
.also { it.show() } .also { it.show() }
@ -315,6 +318,7 @@ object AsrHelper : OfflineCmdListener {
// 离线关键词回调:唤醒词触发时先 TTS 播报,播报结束后启动麦克风 // 离线关键词回调:唤醒词触发时先 TTS 播报,播报结束后启动麦克风
override fun onOfflineCmd(cmd: String) { override fun onOfflineCmd(cmd: String) {
if (handleNoNetworkDialogCmd(cmd)) return
if (cmd == WAKE_WORD || cmd == WAKE_WORD1 || cmd == "C大脑") { if (cmd == WAKE_WORD || cmd == WAKE_WORD1 || cmd == "C大脑") {
Log.d(TAG, "Wake word triggered") Log.d(TAG, "Wake word triggered")
if (!isNetworkAvailable()) { 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() { fun close() {
OfflineCmdServiceHelper.removeOnLineListener(this) OfflineCmdServiceHelper.removeOnLineListener(this)
mainHandler.removeCallbacks(networkCheckRunnable) mainHandler.removeCallbacks(networkCheckRunnable)

查看文件

@ -55,6 +55,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
binding.tv.setOnClickListener { binding.tv.setOnClickListener {
runWithNetwork { runWithNetwork {
// triggerRecognize()
startActivity(Intent(this, TaskListActivity::class.java)) startActivity(Intent(this, TaskListActivity::class.java))
} }
} }