From 07019fc00d0eaf28874c4bd7a32ed87564e7352d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 14 Apr 2026 13:58:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(glass):=20=E6=B7=BB=E5=8A=A0=E7=A6=BB?= =?UTF-8?q?=E7=BA=BF=E8=AF=AD=E9=9F=B3=E5=91=BD=E4=BB=A4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 OfflineCmdListener 接口用于处理离线语音命令回调 - 创建 OfflineCmdServiceHelper 单例类管理离线语音命令服务 - 在 TaskListActivity 中集成离线语音命令监听器并处理翻页操作 - 在 WelcomeActivity 中添加任务列表语音命令跳转功能 - 在 MyApplication 中初始化 Glass SDK 并绑定安全服务 - 配置多个语音命令如任务列表、翻页等命令的拼音识别 - 实现语音触发回调机制以响应相应的界面操作 --- .../com/nova/brain/glass/MyApplication.java | 31 +++++++++++++ .../brain/glass/helper/OfflineCmdListener.kt | 5 ++ .../glass/helper/OfflineCmdServiceHelper.kt | 46 +++++++++++++++++++ .../nova/brain/glass/ui/TaskListActivity.kt | 17 ++++++- .../nova/brain/glass/ui/WelcomeActivity.kt | 34 +++++++++++++- 5 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/nova/brain/glass/helper/OfflineCmdListener.kt create mode 100644 app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt diff --git a/app/src/main/java/com/nova/brain/glass/MyApplication.java b/app/src/main/java/com/nova/brain/glass/MyApplication.java index 7c8a659..4ae100d 100644 --- a/app/src/main/java/com/nova/brain/glass/MyApplication.java +++ b/app/src/main/java/com/nova/brain/glass/MyApplication.java @@ -1,6 +1,10 @@ package com.nova.brain.glass; +import com.blankj.utilcode.util.Utils; +import com.nova.brain.glass.helper.OfflineCmdServiceHelper; import com.nova.brain.glass.repository.HeaderInterceptor; +import com.rokid.security.glass3.open.sdk.GlassSdk; +import com.rokid.security.glass3.open.sdk.client.IServiceConnectionCallback; import com.xuqm.base.App; import com.xuqm.base.di.manager.HttpManager; @@ -16,6 +20,7 @@ public class MyApplication extends App { super.onCreate(); appComponent = HttpManager.getAppComponent(baseUrl, new HeaderInterceptor(getApplicationContext())); + initSdk(); } @@ -23,4 +28,30 @@ public class MyApplication extends App { public boolean showLog() { return super.showLog(); } + + + + void initSdk() { + // 如果SDK已经初始化了,则直接返回 + if (GlassSdk.isReady()) { + return; + } + GlassSdk.bindSecurityService(Utils.getApp(), new IServiceConnectionCallback() { + @Override + public void onServiceConnected() { + OfflineCmdServiceHelper.INSTANCE.init(); + } + + @Override + public void onServiceDisconnected() { + + } + + @Override + public void onBindingDied() { + + } + }); + } + } diff --git a/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdListener.kt b/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdListener.kt new file mode 100644 index 0000000..20eb430 --- /dev/null +++ b/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdListener.kt @@ -0,0 +1,5 @@ +package com.nova.brain.glass.helper + +interface OfflineCmdListener { + fun onOfflineCmd(cmd: String) +} \ No newline at end of file diff --git a/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt b/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt new file mode 100644 index 0000000..adf8090 --- /dev/null +++ b/app/src/main/java/com/nova/brain/glass/helper/OfflineCmdServiceHelper.kt @@ -0,0 +1,46 @@ +package com.nova.brain.glass.helper + +import com.luck.picture.lib.config.PictureSelectionConfig.listener +import com.rokid.security.glass3.open.sdk.GlassSdk +import com.rokid.security.glass3.sdk.base.data.offlineCmd.bean.VoiceAction +import com.rokid.security.glass3.sdk.base.data.offlineCmd.listener.IVoiceCallback +import com.xuqm.base.common.LogHelper +import com.xuqm.base.common.ToolsHelper +import com.xuqm.sdhbwfu.core.extensions.isNull + +data class OfflineCmdBean(val text: String, val pinyin: String) + +object OfflineCmdServiceHelper { + private var listener: OfflineCmdListener? = null + + private val list = mutableListOf().apply { + add(OfflineCmdBean("任务列表", "ren wu lie biao")) + add(OfflineCmdBean("查看任务", "cha kan ren wu")) + add(OfflineCmdBean("查看任务列表", "cha kan ren wu lie biao")) + add(OfflineCmdBean("下一页", "xia yi ye")) + add(OfflineCmdBean("翻页", "fan ye")) + add(OfflineCmdBean("查看下一页", "cha kan xia yi ye")) + add(OfflineCmdBean("继续翻页", "ji xu fan ye")) + add(OfflineCmdBean("继续下一页", "ji xu xia yi ye")) + } + fun init(){ + val service = GlassSdk.getGlassOfflineCmdService() + if (service == null){ + LogHelper.e("OfflineCmdServiceHelper","service is null") + return + } + LogHelper.e("OfflineCmdServiceHelper","service 存在") + for (bean in list) { + GlassSdk.getGlassOfflineCmdService()?.add(VoiceAction(bean.text, bean.pinyin, object : IVoiceCallback.Stub() { + override fun onVoiceTriggered() { + listener?.onOfflineCmd(bean.text) + } + })) + } + } + fun setOnLineListener(listener: OfflineCmdListener){ + this.listener = listener + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt b/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt index 80ecc57..188207d 100644 --- a/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt +++ b/app/src/main/java/com/nova/brain/glass/ui/TaskListActivity.kt @@ -1,14 +1,15 @@ package com.nova.brain.glass.ui -import android.view.View +import android.content.Intent import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivityTaskListBinding +import com.nova.brain.glass.helper.OfflineCmdListener +import com.nova.brain.glass.helper.OfflineCmdServiceHelper import com.nova.brain.glass.model.TaskItem import com.nova.brain.glass.viewmodel.TaskListVM import com.xuqm.base.adapter.BasePagedAdapter import com.xuqm.base.adapter.CommonPagedAdapter import com.xuqm.base.adapter.ViewHolder -import com.xuqm.base.adapter.callback.AdapterClickListener import com.xuqm.base.common.ToolsHelper import com.xuqm.base.ui.BaseListFormLayoutActivity @@ -16,6 +17,18 @@ class TaskListActivity : BaseListFormLayoutActivity() { override fun getLayoutId(): Int = R.layout.activity_task_list override fun fullscreen(): Boolean = true + + override fun initData() { + super.initData() + OfflineCmdServiceHelper.setOnLineListener(object : OfflineCmdListener { + override fun onOfflineCmd(cmd: String) { + when (cmd) { + "下一页", "翻页", "查看下一页", "继续翻页", "继续下一页" -> { + binding.baseRecyclerView + } + } + } + }) } private val adapter = object : CommonPagedAdapter(R.layout.item_task_list) { override fun convert(holder: ViewHolder, item: TaskItem, position: Int) { holder 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 4e86424..25f8ae0 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 @@ -2,8 +2,14 @@ package com.nova.brain.glass.ui import android.content.Intent import android.os.Bundle +import android.util.Log import com.nova.brain.glass.R import com.nova.brain.glass.databinding.ActivityWelcomeBinding +import com.nova.brain.glass.helper.OfflineCmdListener +import com.nova.brain.glass.helper.OfflineCmdServiceHelper +import com.rokid.security.glass3.open.sdk.GlassSdk +import com.rokid.security.glass3.sdk.base.data.offlineCmd.bean.VoiceAction +import com.rokid.security.glass3.sdk.base.data.offlineCmd.listener.IVoiceCallback import com.xuqm.base.ui.BaseActivity class WelcomeActivity : BaseActivity() { @@ -13,7 +19,33 @@ class WelcomeActivity : BaseActivity() { override fun initView(savedInstanceState: Bundle?) { super.initView(savedInstanceState) - startActivity(Intent(this, TaskListActivity::class.java)) +// + + val qtVoiceAction = VoiceAction("任务列表", "ren wu lie biao", object : IVoiceCallback.Stub() { + override fun onVoiceTriggered() { + startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) + } + }) + val qtVoiceAction1 = VoiceAction("查看任务", "cha kan ren wu", object : IVoiceCallback.Stub() { + override fun onVoiceTriggered() { + startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) + } + }) + val qtVoiceAction2 = VoiceAction("查看任务列表", "cha kan ren wu lie biao", object : IVoiceCallback.Stub() { + override fun onVoiceTriggered() { + startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) + } + }) + GlassSdk.getGlassOfflineCmdService()?.addAll(listOf(qtVoiceAction, qtVoiceAction1, qtVoiceAction2)) + OfflineCmdServiceHelper.setOnLineListener(object : OfflineCmdListener { + override fun onOfflineCmd(cmd: String) { + when (cmd) { + "任务列表", "查看任务", "查看任务列表" -> { + startActivity(Intent(this@WelcomeActivity, TaskListActivity::class.java)) + } + } + } + }) }