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.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))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户