feat(glass): 添加离线语音命令功能支持
- 新增 OfflineCmdListener 接口用于处理离线语音命令回调 - 创建 OfflineCmdServiceHelper 单例类管理离线语音命令服务 - 在 TaskListActivity 中集成离线语音命令监听器并处理翻页操作 - 在 WelcomeActivity 中添加任务列表语音命令跳转功能 - 在 MyApplication 中初始化 Glass SDK 并绑定安全服务 - 配置多个语音命令如任务列表、翻页等命令的拼音识别 - 实现语音触发回调机制以响应相应的界面操作
这个提交包含在:
父节点
f8dd6ad081
当前提交
07019fc00d
@ -1,6 +1,10 @@
|
|||||||
package com.nova.brain.glass;
|
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.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.App;
|
||||||
import com.xuqm.base.di.manager.HttpManager;
|
import com.xuqm.base.di.manager.HttpManager;
|
||||||
|
|
||||||
@ -16,6 +20,7 @@ public class MyApplication extends App {
|
|||||||
super.onCreate();
|
super.onCreate();
|
||||||
appComponent = HttpManager.getAppComponent(baseUrl, new HeaderInterceptor(getApplicationContext()));
|
appComponent = HttpManager.getAppComponent(baseUrl, new HeaderInterceptor(getApplicationContext()));
|
||||||
|
|
||||||
|
initSdk();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,4 +28,30 @@ public class MyApplication extends App {
|
|||||||
public boolean showLog() {
|
public boolean showLog() {
|
||||||
return super.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
|
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.R
|
||||||
import com.nova.brain.glass.databinding.ActivityTaskListBinding
|
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.model.TaskItem
|
||||||
import com.nova.brain.glass.viewmodel.TaskListVM
|
import com.nova.brain.glass.viewmodel.TaskListVM
|
||||||
import com.xuqm.base.adapter.BasePagedAdapter
|
import com.xuqm.base.adapter.BasePagedAdapter
|
||||||
import com.xuqm.base.adapter.CommonPagedAdapter
|
import com.xuqm.base.adapter.CommonPagedAdapter
|
||||||
import com.xuqm.base.adapter.ViewHolder
|
import com.xuqm.base.adapter.ViewHolder
|
||||||
import com.xuqm.base.adapter.callback.AdapterClickListener
|
|
||||||
import com.xuqm.base.common.ToolsHelper
|
import com.xuqm.base.common.ToolsHelper
|
||||||
import com.xuqm.base.ui.BaseListFormLayoutActivity
|
import com.xuqm.base.ui.BaseListFormLayoutActivity
|
||||||
|
|
||||||
@ -16,6 +17,18 @@ class TaskListActivity :
|
|||||||
BaseListFormLayoutActivity<TaskItem, TaskListVM, ActivityTaskListBinding>() {
|
BaseListFormLayoutActivity<TaskItem, TaskListVM, ActivityTaskListBinding>() {
|
||||||
override fun getLayoutId(): Int = R.layout.activity_task_list
|
override fun getLayoutId(): Int = R.layout.activity_task_list
|
||||||
override fun fullscreen(): Boolean = true
|
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) {
|
private val adapter = object : CommonPagedAdapter<TaskItem>(R.layout.item_task_list) {
|
||||||
override fun convert(holder: ViewHolder, item: TaskItem, position: Int) {
|
override fun convert(holder: ViewHolder, item: TaskItem, position: Int) {
|
||||||
holder
|
holder
|
||||||
|
|||||||
@ -2,8 +2,14 @@ package com.nova.brain.glass.ui
|
|||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import com.nova.brain.glass.R
|
import com.nova.brain.glass.R
|
||||||
import com.nova.brain.glass.databinding.ActivityWelcomeBinding
|
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
|
import com.xuqm.base.ui.BaseActivity
|
||||||
|
|
||||||
class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
||||||
@ -13,7 +19,33 @@ class WelcomeActivity : BaseActivity<ActivityWelcomeBinding>() {
|
|||||||
|
|
||||||
override fun initView(savedInstanceState: Bundle?) {
|
override fun initView(savedInstanceState: Bundle?) {
|
||||||
super.initView(savedInstanceState)
|
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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户