【问题标题】:How do you customise Glass contextual voice menu in an immersion *after* its initial setup?在初始设置后*如何在沉浸式中自定义 Glass 上下文语音菜单?
【发布时间】:2014-07-15 15:38:27
【问题描述】:

我已经成功地填充了我的玻璃器皿沉浸式的上下文语音菜单,但我希望能够在 onPreparePanel() 或 onCreatePanelMenu() 中的初始设置之后更改菜单,如下所述: Programmatically populated contextual "ok glass" menu.

理想情况下,在收到“ok, glass”语音命令后会调用其中一个回调,但据我所知,它们都不是。结果,您被困在语音命令菜单的版本中,因为这是您第一次进入活动。

到目前为止,唯一接近的黑客是当我将 GlassVoice.apk 从设备中取出并设置手动 VoiceListener 时(如这里讨论的:Glass voice command nearest match from given list)。当检测到语音命令时调用 onVoiceCommand,我尝试通过调用 invalidateOptionsMenu()(无效)或 getWindow().invalidatePanelMenu(WindowUtils.FEATURE_VOICE_COMMANDS) 来强制刷新菜单。第二个看起来像是试图拉出菜单,但随后又立即将其隐藏起来。

如何在活动生命周期的后期动态更改上下文语音菜单?

【问题讨论】:

    标签: google-glass google-gdk


    【解决方案1】:

    我实际上只是编写了一个示例应用程序,这对我来说很好用。

    一定要使用onCreatePanelMenu()创建语音菜单并勾选

    if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS || 
        featureId == Window.FEATURE_OPTIONS_PANEL) ...
    

    为触摸菜单和语音菜单增加菜单。

    要刷新两者,在onMenuItemSelected() 中,确保调用invalidateOptionsMenu() 刷新触摸菜单和getWindow().invalidatePanelMenu(WindowUtils.FEATURE_VOICE_COMMANDS) 刷新语音菜单。我只是在第一个菜单项选择上翻转了一个布尔值,我用它来确定是否应该扩大旧菜单或新菜单。

    您运行的是哪个版本的 Glass?

    【讨论】:

    • 好的,调用这两个 invalidate 方法可以正常工作,但如果它被添加到 onMenuItemSelected 中,则意味着在选择某些内容后会立即重建菜单。我真正想要的是根据自上次调用以来发生的任何事情在需要显示菜单之前立即重建菜单(即,如果在选择菜单项后的任何时候翻转布尔值会发生什么?)跨度>
    • 我们亲自讨论过这个问题,但只是为了后代以防其他人想知道:调用 invalidate() 不会重建菜单,它会将其标记为脏。每当您的数据发生变化时,多次调用 invalidate 是可以的。菜单只会在下次调用时重建一次。
    猜你喜欢
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多