我对VoiceInteractionService有很多疑问。
https://developer.android.com/reference/android/service/voice/VoiceInteractionService
对我来说似乎很清楚,这是Google助手通过挂钩机制进入操作系统以实际用作默认助手的机制。但是,仍有很多地方需要更多解释。
在VoiceInteractionSession中:
- 该文档说:“默认情况下,最初显示用户界面,并且可以通过覆盖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()?
- 我也不清楚startAssistantActivity()方法,startVoiceActivity()方法和上述方法之间的关系。我们什么时候要调用startAssistantActivity?我们什么时候要调用startVoiceActivity?在文档中,“默认情况下,系统将为此会话的UI创建一个窗口。如果使用的是辅助活动,则可以通过在onPrepareShow中调用setUiEnabled来禁用窗口创建。这是onCreateContentView()返回的视图吗?与onCreateContentView相比,startAssistantActivity()是否是显示助手UI的另一种方式?
- 如何调用onLockscreenShown()?从锁定屏幕启动助手时会调用它吗?用户在助手打开时是否锁定了手机?
- 要在锁定屏幕上显示助手UI,是否需要做些特殊的事情?
- 为什么不调用closeSystemDialogs()?似乎您几乎永远不想在助手应用程序上看到系统窗口。
- 如果用户通过按住主屏幕按钮或其他方式调用了助手,是否有办法可靠地获取前台组件名称?我看到getActivityComponent()是AssistStructure中的访问器,但是我不清楚会话在哪种情况下可以访问该对象。
- 各种服务和会话的生命周期是什么?如果有单独的服务实际上在处理音频数据,那么该服务何时应绑定/取消绑定?在onShow()和onHide()中?
VoiceInteractionService:
- createAlwaysOnHotwordDetector-如果我想一次激活多个热键怎么办?例如,“嘿Google”和“ OK Google”?
- 关于热字检测器回调:调用onDetected时,有一个方法getTriggerAudio()包含触发请求的原始音频。如何确保您不会错过任何用户讲话?例如,相对于“嘿谷歌……”,用户说“嘿谷歌时间”是一种更好的体验。时间”。
- 回调中正确的“响应”以调用showSession吗?
- 假设助手想要在实际显示任何UI之前运行辅助唤醒单词验证(也要确保用户确实说出了这个热门单词),是执行此操作的最佳方法:
- 在热字检测器的回调中运行验证
- 如果确实是唤醒词,请致电show session
- 否则,请保持沉默
- onLaunchVoiceAssistFromFromKeyguard的文档说,您需要使用在锁屏上显示标志开始活动。这有点令人困惑,因为我仍不确定是否应该启动活动来显示UI或使用onCreateContentView()?
- setUiHints是做什么的?提示将出现在什么上下文中?他们是敬酒吗?它们是否已嵌入其他UI?
一般的问题:
- 以下清单属性和VoiceInteractionService之间是什么关系?根据网络上的其他一些文档,需要显示为潜在默认助手的是AndroidManifest.xml中的以下代码,如下所示:https : //gist.github.com/pedrovgs/c424fe754a74f326e997。但是,似乎还自动在列表中包含一个包含VoiceInteractionService的应用程序。有没有推荐的方法让其他助手继续前进?