feat(asr): 添加无网络状态下的语音命令处理功能
- 在AsrHelper中新增Intent和WelcomeActivity导入 - 引入exitProcess用于应用退出功能 - 修改无网络对话框标题和消息内容 - 添加handleNoNetworkDialogCmd方法处理"退出"和"返回"语音命令 - 实现语音命令触发的应用退出和返回欢迎页面功能 - 在WelcomeActivity中注释掉triggerRecognize调用
这个提交包含在:
父节点
562ae7a96a
当前提交
ac53fa1f86
@ -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)
|
||||
|
||||
@ -55,6 +55,7 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||
window.addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
binding.tv.setOnClickListener {
|
||||
runWithNetwork {
|
||||
// triggerRecognize()
|
||||
startActivity(Intent(this, TaskListActivity::class.java))
|
||||
}
|
||||
}
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户