I have just begun developing for Google Glass, and I knew the GDK if fairly new so this may not be possible yet, but here's what I'm trying to to:
As with the "make a call" prompt or the "send a message to" prompts on the "okay glass" screen, I would like my app to have more voice selected options when you select it with your voice. With the two examples, you will see a list of contacts, which you can nod your head up and down to see more of, and the app will only take further actions one you've selected one of the displayed choices. Is there currently any way to do that on my own app?
Any input is appreciated!
You can call an intent to display the Voice Recognizer after your Activity has started. So, you could have your voice trigger and prompt from the launch, and then, in your Activity's onResume(), call the Voice Recognizer, with some kind of prompt (or you could just string the initial speech collected into this as the prompt):
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra( RecognizerIntent.EXTRA_PROMPT, "ok glass, here's my prompt" );
startActivityForResult(intent, 0);
You then would need an onActivityResult() method to process the return form the VoiceRecognizer.
This is the described in the GDK docs:
https://developers.google.com/glass/develop/gdk/input/voice
Not sure if there is any other way.
I found this answer from another SO question that seems exactly like you want. I have tried it myself for my own Glassware and it works perfectly. As mentioned in the answer below, one caveat that other apps that use the same "ok glass" voice command will share the submenu; in the following example, for instance, some other app may add other games such as "golf." Another potential problem is that you must have an Activity or Service for each of the options you want in the submenu.
"If you have multiple activities/services installed on Glass that have the same voice trigger intent filter, all of their names (based on the android:label
attribute of the <activity>
or <service>
tag in AndroidManifest.xml
) will appear in a disambiguation "submenu" when you speak that voice trigger.
For example (assume that res/xml/play_a_game_trigger.xml
represents a voice trigger for the string "play a game"):
<activity android:label="Tennis">
<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/play_a_game_trigger" />
</activity>
<activity android:label="Bowling">
<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/play_a_game_trigger" />
</activity>
would give you a voice menu flow that looks like
ok glass → play a game → Tennis
Bowling
Do note, however, that this menu would also include activities/services from other APKs that use the same voice trigger as well.
You can find more details at the Voice Input page of the GDK documentation."
Are you asking if you can add a voice command to Glass that will trigger your app? If so - absolutely. This is, in fact, the suggested way to start an app on the GDK.
See https://developers.google.com/glass/develop/gdk/input/voice#launching_glassware for the details, but basically you'll
- Add resources to
res/values/strings.xml
describing the trigger and prompt
- Create a resource in
res/xml/<my_voice_trigger>.xml
that uses the string value as the keyword and sets the input prompt
- Register an intent filter for the VOICE_TRIGGER action
(As an aside, it appears that verbs are the best voice triggers to use - they flow more naturally with the "ok, glass" menu item.)
Now you can use framework apis to show an ok glass menu on your activity,
check this Docs about contextual voice commands
https://developers.google.com/glass/develop/gdk/voice#contextual_voice_commands