feat(glass): 添加离线语音命令功能支持

- 新增 OfflineCmdListener 接口用于处理离线语音命令回调
- 创建 OfflineCmdServiceHelper 单例类管理离线语音命令服务
- 在 TaskListActivity 中集成离线语音命令监听器并处理翻页操作
- 在 WelcomeActivity 中添加任务列表语音命令跳转功能
- 在 MyApplication 中初始化 Glass SDK 并绑定安全服务
- 配置多个语音命令如任务列表、翻页等命令的拼音识别
- 实现语音触发回调机制以响应相应的界面操作
这个提交包含在:
徐勤民 2026-04-14 13:58:04 +08:00
父节点 f8dd6ad081
当前提交 07019fc00d
共有 5 个文件被更改,包括 130 次插入3 次删除

查看文件

@ -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() {
}
});
}
}

查看文件

@ -0,0 +1,5 @@
package com.nova.brain.glass.helper
interface OfflineCmdListener {
fun onOfflineCmd(cmd: String)
}

查看文件

@ -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<OfflineCmdBean>().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
}
}

查看文件

@ -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<TaskItem, TaskListVM, ActivityTaskListBinding>() {
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<TaskItem>(R.layout.item_task_list) {
override fun convert(holder: ViewHolder, item: TaskItem, position: Int) {
holder

查看文件

@ -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<ActivityWelcomeBinding>() {
@ -13,7 +19,33 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
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))
}
}
}
})
}