Java Google Glass未列出的上下文语音命令无法正常工作

Java Google Glass未列出的上下文语音命令无法正常工作,java,android,google-glass,Java,Android,Google Glass,我无法识别未列出的语音命令。我无法像预期的那样使用语音命令“ok glass”->“Test”启动应用程序。但我可以使用“ok glass”在我的应用程序中调用菜单。菜单与所有3个菜单项一起正确显示,但是说“旋转”,“自由旋转”,“停止旋转”不会产生任何影响。我认为识别未列出的命令有问题,但我不明白。有什么建议吗?我还想知道从菜单项到语音触发器的连接是如何发生的,因为菜单项只知道String.xml的字符串?用触摸条控制菜单工作正常 Manifest.xml <?xml version="

我无法识别未列出的语音命令。我无法像预期的那样使用语音命令
“ok glass”
->
“Test”
启动应用程序。但我可以使用“ok glass”在我的应用程序中调用菜单。菜单与所有3个菜单项一起正确显示,但是说
“旋转”
“自由旋转”
“停止旋转”
不会产生任何影响。我认为识别未列出的命令有问题,但我不明白。有什么建议吗?我还想知道从菜单项到语音触发器的连接是如何发生的,因为菜单项只知道
String.xml
的字符串?用触摸条控制菜单工作正常

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.blah.stl3dviewer" >
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-permission
    android:name="com.google.android.glass.permission.DEVELOPMENT" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.DeviceDefault" >
    <activity
        android:name=".STLViewportActivity"
        android:icon="@drawable/ic_glass_logo"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
        </intent-filter>

        <meta-data android:name="com.google.android.glass.VoiceTrigger"
                   android:resource="@xml/voice_trigger" />

    </activity>
</application>
</manifest>

我尝试了一些语音命令,我发现:

  • “测试”似乎不起作用。另一方面,第一个字母小写的“test”则起作用。这似乎只影响某些单词,因为我已经成功地使用了“下一步”作为触发器
  • 将字符串资源“Stop Rotate”更改为“Stop_Rotate”可以工作

  • 在我的例子中,当我将玻璃连接到Wifi时,问题就解决了。代码中没有其他更改。多亏了Flupp。

    现在我找不到您的代码有什么问题,但我可以肯定地告诉您,在xml目录中,唯一有用的xml是voice_trigger.xml。玻璃通过读取android:title直接识别menu.xml中的语音命令。voice_trigger.xml会告诉清单中的Glass操作系统,该操作系统可以由应用程序外部的“ok Glass”启动。但是通过“ok glass”->“Test”调用我的应用程序也不起作用,几天后,该问题一直悬而未决。您是否可以尝试在清单中添加您的活动:@Cloud57:这没有任何影响。@Flupp您可以发布您的相关文件的最终版本吗?谢谢您的回答。我把它改成了你的建议,但还是不起作用。现在我知道为什么了,因为Glass需要一个互联网连接。自从我把它连接起来,一切都很顺利。
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/rotate_menu_item"
        android:title="@string/glass_rotate_trigger"
        />
    <item
        android:id="@+id/freerotate_menu_item"
        android:title="@string/glass_freerotate_trigger"
        />
    <item
        android:id="@+id/stoprotate_menu_item"
        android:title="@string/glass_stoprotate_trigger"
        />
    </menu>
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="app_name">Test</string>
    <string name="title_activity_stlviewport">STL Viewport</string>
    <string name="glass_rotate_trigger">Rotate</string>
    <string name="glass_stoprotate_trigger">Stop Rotate</string>
    <string name="glass_freerotate_trigger">Free Rotate</string>
    </resources>
    
    <?xml version="1.0" encoding="utf-8"?>
    <trigger keyword="@string/glass_rotate_trigger" />
    
    <?xml version="1.0" encoding="utf-8"?>
    <trigger keyword="@string/glass_freerotate_trigger" />
    
    <?xml version="1.0" encoding="utf-8"?>
    <trigger keyword="@string/glass_stoprotate_trigger" />
    
    <?xml version="1.0" encoding="utf-8"?>
    <trigger keyword="@string/app_name" />
    
    public class STLViewportActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle bundle) {
        //...
        getWindow().requestFeature(WindowUtils.FEATURE_VOICE_COMMANDS);
        //...
    }
    @Override
    public boolean onCreatePanelMenu(int featureId, Menu menu) {
        if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS
                    || featureId == Window.FEATURE_OPTIONS_PANEL) {
            getMenuInflater().inflate(R.menu.menu, menu);
            return true;
        }
        return super.onCreatePanelMenu(featureId, menu);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }
    
    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        if (featureId == WindowUtils.FEATURE_VOICE_COMMANDS
                || featureId == Window.FEATURE_OPTIONS_PANEL) {
            switch (item.getItemId()) {
                case R.id.rotate_menu_item:
                    openglViewport.getRenderer().setAutoRotate();
                    break;
                case R.id.stoprotate_menu_item:
                    openglViewport.getRenderer().setNoRotate();
                    break;
                case R.id.freerotate_menu_item:
                    openglViewport.getRenderer().setFreeRotate();
                    break;
                default:
                    return true;
            }
            return true;
        }
        return super.onMenuItemSelected(featureId, item);
    }
    }