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)) } }