page.title=Adding Voice Capabilities page.tags=wear helpoutsWidget=true @jd:body
Voice actions are an important part of the wearable experience. They let users carry out actions hands-free and quickly. Wear provides two types of voice actions:
The Android Wear platform provides several voice intents that are based on user actions such as "Take a note" or "Set an alarm". This allows users to say what they want to do and let the system figure out the best activity to start.
When users speak the voice action, your app can filter for the intent that is fired to start an activity. If you want to start a service to do something in the background, show an activity as a visual cue and start the service in the activity. Make sure to call {@link android.app.Activity#finish finish()} when you want to get rid of the visual cue.
For example, for the "Take a note" command, declare this intent filter to start an activity
named MyNoteActivity
:
<activity android:name="MyNoteActivity"> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="com.google.android.voicesearch.SELF_NOTE" /> </intent-filter> </activity>
Here is a list of the voice intents supported by the Wear platform:
Name | Example Phrases | Intent |
---|---|---|
Call a car/taxi | "OK Google, get me a taxi" "OK Google, call me a car" |
|
Take a note | "OK Google, take a note" "OK Google, note to self" |
|
Set alarm | "OK Google, set an alarm for 8 AM" "OK Google, wake me up at 6 tomorrow" |
|
Set timer | "Ok Google, set a timer for 10 minutes" |
|
Start stopwatch | "Ok Google, start stopwatch" |
|
Start/Stop a bike ride | "OK Google, start cycling" "OK Google, start my bike ride" "OK Google, stop cycling" |
|
Start/Stop a run | "OK Google, track my run" "OK Google, start running" "OK Google, stop running" |
|
Start/Stop a workout | "OK Google, start a workout" "OK Google, track my workout" "OK Google, stop workout" |
|
Show heart rate | "OK Google, what’s my heart rate?" "OK Google, what’s my bpm?" |
|
Show step count | "OK Google, how many steps have I taken?" "OK Google, what’s my step count?" |
|
For documentation on registering for platform intents and accessing the extras information contained in them, see Common intents.
If none of the platform voice intents work for you, you can start your apps directly with a "Start MyActivityName" voice action.
Registering for a "Start" action is the same as registering for a launcher icon on a handheld. Instead of requesting an app icon in a launcher, your app requests a voice action instead.
To specify the text to say after "Start", specify a label
attribute for the activtiy
that you want to start. For example, this intent filter recognizes the
"Start MyRunningApp" voice action and launches StartRunActivity
.
<application> <activity android:name="StartRunActivity" android:label="MyRunningApp"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
In addition to using voice actions to launch activities, you can also call the system's built-in Speech Recognizer activity to obtain speech input from users. This is useful to obtain input from users and then process it, such as doing a search or sending it as a message.
In your app, you call {@link android.app.Activity#startActivityForResult startActivityForResult()} using the {@link android.speech.RecognizerIntent#ACTION_RECOGNIZE_SPEECH} action. This starts the speech recognition activity, and you can then handle the result in {@link android.app.Activity#onActivityResult onActivityResult()}.private static final int SPEECH_REQUEST_CODE = 0; // Create an intent that can start the Speech Recognizer activity private void displaySpeechRecognizer() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // Start the activity, the intent will be populated with the speech text startActivityForResult(intent, SPEECH_REQUEST_CODE); } // This callback is invoked when the Speech Recognizer returns. // This is where you process the intent and extract the speech text from the intent. @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SPEECH_REQUEST_CODE && resultCode == RESULT_OK) { List<String> results = data.getStringArrayListExtra( RecognizerIntent.EXTRA_RESULTS); String spokenText = results.get(0); // Do something with spokenText } super.onActivityResult(requestCode, resultCode, data); }