Google Glass 未列出的上下文语音命令无法正常工作
Google Glass unlisted Contextual Voice Commands not working properly
我无法识别未列出的语音命令。我无法像预期的那样使用语音命令 "ok glass"
-> "Test"
启动应用程序。但是我可以使用 "ok glass" 在我的应用程序中调用菜单。菜单可以正确显示所有 3 个菜单项,但是说 "rotate"
、"free rotate"
、"stop rotate"
没有任何效果。我认为未列出的命令的识别有问题,但我不明白。有什么建议么?我也想知道从菜单项到语音触发器的连接是如何发生的,因为菜单项只知道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>
Menu.xml
<?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>
String.xml
<?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>
rotate_voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/glass_rotate_trigger" />
免费rotate_voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/glass_freerotate_trigger" />
停止rotate_voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/glass_stoprotate_trigger" />
voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/app_name" />
STLViewportActivity.java(只是重要内容的摘录)
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);
}
}
我尝试了一些语音命令,以下是我的发现:
- "Test"好像不行。 "test" 另一方面,小写第一个字母确实有效。似乎这只影响某些词,因为我已经能够成功使用 "Next" 作为触发器。
- 将字符串资源 "Stop Rotate" 更改为 "stop_rotate" 有效。
就我而言,当我将 Glass 连接到 Wifi 时,问题就解决了。没有对代码进行额外的更改。感谢 Flupp。
我无法识别未列出的语音命令。我无法像预期的那样使用语音命令 "ok glass"
-> "Test"
启动应用程序。但是我可以使用 "ok glass" 在我的应用程序中调用菜单。菜单可以正确显示所有 3 个菜单项,但是说 "rotate"
、"free rotate"
、"stop rotate"
没有任何效果。我认为未列出的命令的识别有问题,但我不明白。有什么建议么?我也想知道从菜单项到语音触发器的连接是如何发生的,因为菜单项只知道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>
Menu.xml
<?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>
String.xml
<?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>
rotate_voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/glass_rotate_trigger" />
免费rotate_voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/glass_freerotate_trigger" />
停止rotate_voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/glass_stoprotate_trigger" />
voice_trigger.xml
<?xml version="1.0" encoding="utf-8"?>
<trigger keyword="@string/app_name" />
STLViewportActivity.java(只是重要内容的摘录)
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);
}
}
我尝试了一些语音命令,以下是我的发现:
- "Test"好像不行。 "test" 另一方面,小写第一个字母确实有效。似乎这只影响某些词,因为我已经能够成功使用 "Next" 作为触发器。
- 将字符串资源 "Stop Rotate" 更改为 "stop_rotate" 有效。
就我而言,当我将 Glass 连接到 Wifi 时,问题就解决了。没有对代码进行额外的更改。感谢 Flupp。