VoiceInteractionService如何运作?

时间:2019-05-09 20:01:05

标签: android google-assistant-sdk

我对VoiceInteractionService有很多疑问。

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

对我来说似乎很清楚,这是Google助手挂钩到操作系统以实际用作默认助手的机制。但是,仍有很多地方需要更多解释。

在VoiceInteractionSession中:

  1. 该文档说:“默认情况下,最初显示该用户界面,并且可以通过覆盖其中可以构建UI的onCreateContentView()(https://developer.android.com/reference/android/service/voice/VoiceInteractionSession.html#onCreateContentView())来创建该用户界面。”语音服务的UI应该如何?被建造?当前,我们的UI存在于Activity中。但是会话中存在getLayoutInflater(),getWindow(),onShow()和onCreateContentView()使我不确定如何显示UI。我是否应该发送意图以便在onShow()中显示我们的UI活动?还是应该在Java中创建UI并将其作为onCreateContentView()中的视图返回?我应该使用窗口绘制吗?我是否需要随时调用setContentView()?
  2. 我也不清楚startAssistantActivity()方法,startVoiceActivity()方法和上述方法之间的关系。我们什么时候要调用startAssistantActivity?我们什么时候要调用startVoiceActivity?在文档中,“默认情况下,系统将为此会话的UI创建一个窗口。如果使用的是辅助活动,则可以通过在onPrepareShow中调用setUiEnabled来禁用窗口创建。这是onCreateContentView()返回的视图吗?与onCreateContentView相比,startAssistantActivity()是否是显示助手UI的另一种方式?
  3. 如何调用onLockscreenShown()?从锁定屏幕启动助手时会调用它吗?如果用户在助手打开时锁定了手机?
  4. 是否需要做一些特殊的事情才能在锁定屏幕上显示助手UI?
  5. 您为什么不致电closeSystemDialogs()?似乎您几乎永远都不希望助手应用程序中的系统窗口可见。
  6. 如果用户通过按住主屏幕按钮或什至以其他方式调用了助手,是否有办法可靠地获取前台组件名称?我看到getActivityComponent()是AssistStructure中的访问器,但我不清楚会话在哪种情况下可以访问该对象。
  7. 各种服务和会话的生命周期是什么?如果实际上有单独的服务处理音频数据的处理,则该服务何时应绑定/取消绑定?在onShow()和onHide()中?

VoiceInteractionService:

  1. createAlwaysOnHotwordDetector-如果我想一次激活多个关键词怎么办?例如,“嘿Google”和“确定Google”?
  2. 关于热门单词检测器回调:调用onDetected时,有一种方法getTriggerAudio()包含触发请求的原始音频。如何确保您不会错过任何用户讲话?例如,用户说“ Hey Google time”比“ Hey Google…”要好得多。时间”。
  3. 回调中正确的“响应”以调用showSession吗?
  4. 假设助手想要在实际显示任何UI之前运行辅助唤醒单词验证(也要确保用户确实说出了热门单词),是执行此操作的最佳方法:
    1. 在热字检测器的回调中运行验证
    2. 如果确实是唤醒词,请致电show session
    3. 否则,请保持沉默
  5. onLaunchVoiceAssistFromFromKeyguard的文档说,您需要使用在锁屏上显示标志开始活动。这有点令人困惑,因为我仍不确定是否应该启动活动来显示UI或使用onCreateContentView()?
  6. setUiHints是做什么的?提示将出现在什么上下文中?他们是敬酒吗?它们是否嵌入到其他UI中?

一般问题:

  1. 以下清单属性和VoiceInteractionService之间是什么关系?根据网络上的其他一些文档,作为潜在的默认助手需要显示的是AndroidManifest.xml中的以下代码,如下所示:https://gist.github.com/pedrovgs/c424fe754a74f326e997。但是,似乎还自动在列表中包含一个包含VoiceInteractionService的应用程序。有没有推荐的方法让其他助手继续前进?

1 个答案:

答案 0 :(得分:0)

对于VoiceInteractionSession中的UI,应该将您的布局膨胀(与getLayoutInflater().inflate(layout)中的onCreateContentView()一起,通过id查找视图并返回视图。

如果您需要设置主题,则应使用setTheme(theme)进行设置,并在调用onCreate()

之前在{strong>