我对VoiceInteractionService有很多疑问。

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

对我来说似乎很清楚,这是Google助手通过 Hook 机制进入操作系统以实际用作默认助手的机制。但是,关于它的很多事情还需要更多的解释。

在VoiceInteractionSession中:

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

  • VoiceInteractionService:
  • createAlwaysOnHotwordDetector-如果我想一次激活多个热点怎么办?例如,“嘿Google”和“OK Google”?
  • 关于热词检测器回调:调用onDetected时,有一个getTriggerAudio()方法,其中包含触发请求的原始音频。如何确保您不会错过任何用户讲话?例如,用户说“Hey Google time”比“Hey Google…”要好得多。时间”。
  • 回调中正确的“响应”以调用showSession吗?
  • 假设助手想要在实际显示任何UI之前运行辅助唤醒字验证(也要确保用户确实说出了这个热门字),这是最好的方法:
  • 在热字检测器
  • 的回调中运行验证
  • 如果确实是唤醒词,则调用show session
  • 否则,请默默忽略
  • onLaunchVoiceAssistFromFromKeyguard的文档说,您需要使用在锁屏标志上显示来启动 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() 中调用

    10-07 19:47
    查看更多