我已经成功填充了我的玻璃器皿沉浸的上下文语音菜单,但我希望能够在 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)。第二个看起来它试图拉起菜单,但然后立即再次隐藏它。
如何在活动的生命周期中动态更改上下文语音菜单?
答案 0 :(得分:4)
我实际上只是写了一个示例应用程序,这对我来说很好。
务必使用onCreatePanelMenu()
创建语音菜单并检查
if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS ||
featureId == Window.FEATURE_OPTIONS_PANEL) ...
为手动菜单和语音菜单充气。
要在onMenuItemSelected()
中同时刷新两者,请务必同时调用invalidateOptionsMenu()
来刷新触摸菜单,并getWindow().invalidatePanelMenu(WindowUtils.FEATURE_VOICE_COMMANDS)
来刷新语音菜单。我只是在第一个菜单项选择上翻了一个布尔值,我用它来确定是否应该对旧菜单或新菜单进行膨胀。
您在运行什么版本的Glass?