android - VoiceInteractionService 如何工作?

标签 android google-assistant-sdk

我有很多关于 VoiceInteractionService 的问题。

https://developer.android.com/reference/android/service/voice/VoiceInteractionService

对我来说似乎很清楚的是,谷歌助手通过这种机制与操作系统 Hook ,以便实际作为默认助手工作。然而,关于它还有很多需要更多解释的地方。

在 VoiceInteractionSession 中:

  • 文档说“用户界面最初默认显示,并且可以通过覆盖 onCreateContentView() ( https://developer.android.com/reference/android/service/voice/VoiceInteractionSession.html#onCreateContentView() ) 来创建,在其中可以构建 UI。”语音服务的 UI 应该如何构建?目前我们的 UI 存在于一个 Activity 中。但是 session 中 getLayoutInflater()、getWindow()、onShow() 和 onCreateContentView() 的存在让我不确定 UI 将如何显示。我应该发送一个 Intent 以在 onShow() 中显示我们的 UI Activity 吗?或者我应该在 Java 中创建 UI 并将其作为 onCreateContentView() 中的 View 返回?我应该使用Window来绘制吗?我需要随时调用 setContentView() 吗?
  • 我也不清楚 startAssistantActivity() 方法、startVoiceActivity() 方法和上述方法之间的关系。我们什么时候想调用 startAssistantActivity?我们什么时候想调用 startVoiceActivity ?在文档中,它说“默认情况下,系统将为该 session 的 UI 创建一个窗口。如果您使用的是辅助 Activity ,那么您可以通过在 onPrepareShow 中调用 setUiEnabled 来禁用窗口创建“这是由 onCreateContentView() 返回的 View 吗?与 onCreateContentView 相比,startAssistantActivity() 是不是一种显示助手 UI 的替代方式?
  • onLockscreenShown() 如何被调用?从锁屏启动助手时是否调用?如果用户在助手打开时锁定手机?
  • 在锁屏上显示助手 UI 需要做什么特殊的事情吗?
  • 为什么不调用 closeSystemDialogs()?似乎您几乎从不希望在助手应用程序上看到系统窗口。
  • 如果用户通过按住home键,甚至其他方式调用助手,是否有办法可靠地获取前台组件名称?我看到 getActivityComponent() 是 AssistStructure 中的一个访问器,但我不清楚 session 在哪些情况下可以访问该对象。
  • 各种服务和 session 的生命周期是什么?如果有一个单独的服务实际处理音频数据的处理,那么该服务应该什么时候绑定(bind)/解除绑定(bind)?在 onShow() 和 onHide() 中?

  • 语音交互服务:
  • createAlwaysOnHotwordDetector - 如果我想同时激活多个热门词怎么办?例如,“Hey Google”和“OK Google”?
  • 关于启动指令检测器回调:当 onDetected 被调用时,有一个方法 getTriggerAudio() 包含触发请求的原始音频。你如何确保你不会错过任何用户的演讲?例如,用户说“Hey Google time”比“Hey Google ....时间”。
  • 调用 showSession 的回调中的“响应”是否正确?
  • 假设助手想要在实际显示任何 UI 之前运行辅助唤醒词验证(也就是确保用户确实说出了启动指令),这是最好的方法:
  • 在来自启动指令检测器的回调中运行验证
  • 如果确实是唤醒词,则调用 show session
  • 否则,默默无视
  • onLaunchVoiceAssistFromKeyguard 的文档说您需要使用锁定屏幕标志上的节目来启动 Activity 。这有点令人困惑,因为我仍然不确定是否应该开始一个 Activity 来显示 UI 或以某种方式使用 onCreateContentView()?
  • setUiHints 有什么作用?提示出现的上下文是什么?他们是 toast 吗?它们是否嵌入到其他 UI 中?

  • 一般的问题:
  • 以下 list 属性与 VoiceInteractionService 之间的关系是什么?根据网络上的其他一些文档,显示为潜在默认助手所需的是在 AndroidManifest.xml 中截取的以下代码,如下所示:https://gist.github.com/pedrovgs/c424fe754a74f326e997 .但似乎包含 VoiceInteractionService 的应用程序也会自动出现在列表中。有没有推荐的方法来让不同的助手继续前进?
  • 最佳答案

    对于 VoiceInteractionSession 中的 UI ,您应该扩大您的布局(在 getLayoutInflater().inflate(layout) 中使用 onCreateContentView() ,通过 id 查找您的 View 并返回 View 。
    如果需要设置主题,应该用setTheme(theme)设置并调用 onCreate() 之前 调用 super.onCreate()

    关于android - VoiceInteractionService 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56066756/

    相关文章:

    android - 最大 Activity 数量!

    安卓NFC启动服务

    android - 我可以将 google Assistant sdk 与 google home 应用程序链接起来吗?

    python - 没有名为 pathlib2 的模块

    Android 2.2 VideoView问题

    java - 不同分辨率下的动态 EditText 大小不同

    java - 单击按钮时 setText 不会更改或更新

    dialogflow-es - 使用 Google Assistant Action 通过我的号码触发电话调用

    java - 让我的 Google 助理针对特定单词调用我的 REST API

    android - 当用户对 Google Assistant 说 "Hey Google, turn on the light"时,我们是否需要 Google 的特殊许可才能接收命令?