Bladeren bron

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

- 新增 OfflineCmdListener 接口用于处理离线语音命令回调
- 创建 OfflineCmdServiceHelper 单例类管理离线语音命令服务
- 在 TaskListActivity 中集成离线语音命令监听器并处理翻页操作
- 在 WelcomeActivity 中添加任务列表语音命令跳转功能
- 在 MyApplication 中初始化 Glass SDK 并绑定安全服务
- 配置多个语音命令如任务列表、翻页等命令的拼音识别
- 实现语音触发回调机制以响应相应的界面操作
徐勤民 3 dagen geleden
bovenliggende
commit
07019fc00d

+ 31 - 0
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() {
+
+            }
+        });
+    }
+
 }

+ 5 - 0
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)
+}

+ 46 - 0
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<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
+    }
+
+
+}

+ 15 - 2
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<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

+ 33 - 1
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<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))
+                    }
+                 }
+            }
+        })
     }