Las acciones de voz son una parte importante de la experiencia con dispositivos wearable. Estas permiten a los usuarios realizar acciones de manera rápida y en modo de manos libres. Wear OS by Google proporciona dos tipos de acciones de voz:
- Proporcionadas por el sistema
- Estas acciones de voz se basan en tareas y están incorporadas en la plataforma de Wear. Puedes filtrarlas en la actividad que quieras iniciar cuando la acción de voz se dice en voz alta. Por ejemplo, "Crear una nota" o "Establecer un alarma".
- Proporcionadas por la app
- Estas acciones de voz se basan en la app y puedes declararlas de la misma manera que un ícono de selector. Los usuarios dicen "Iniciar Nombre de tu app" para usar estas acciones de voz, y se inicia la actividad que especifiques.
Cómo declarar acciones de voz proporcionadas por el sistema
La plataforma de Wear OS proporciona varios intents de voz que se basan en acciones del usuario como "Crear una nota" o "Establecer una alarma". De esta manera, los usuarios pueden decir lo que quieren hacer y dejar que el sistema decida qué actividad iniciar.
Cuando los usuarios solicitan las acciones, tu app puede filtrar por el intent que se activa al iniciar una actividad. Si quieres iniciar un servicio para que realice una acción en segundo plano, muestra una actividad (como una indicación visual) y, luego, inicia el servicio en la actividad. Asegúrate de llamar a finish()
cuando quieras deshacerte de la señal visual.
Por ejemplo, en el caso del comando "Crear una nota", debes declarar este filtro de intent para iniciar una actividad llamada 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>
A continuación, se muestra una lista de intents de voz que admite la plataforma de Wear:
Nombre | Frases de ejemplo | Intent |
---|---|---|
Pedir un auto/taxi | "Ok Google, consígueme un taxi" "Ok Google, llámame un auto" |
|
Tomar nota | "Ok Google, toma nota" "Ok Google, una nota para mí mismo" |
|
Establecer alarma | "Ok Google, establece una alarma para las 8 a.m." "Ok Google, despiértame a las 6 mañana" |
|
Establecer temporizador | "Ok Google, establece un temporizador de 10 minutos" |
|
Iniciar cronómetro | "Ok Google, inicia el cronómetro" |
|
Iniciar/finalizar un paseo en bicicleta | "Ok Google, comienza a andar en bicicleta" "Ok Google, comienza mi paseo en bicicleta" "Ok Google, deja de andar en bicicleta" |
|
Comenzar/dejar de correr | "OK Google, seguimiento de mi carrera" "Ok Google, empieza a correr" "Ok Google, deja de correr" |
|
Iniciar/detener un entrenamiento | "Ok Google, inicia un entrenamiento" "Ok Google, haz un seguimiento de mi entrenamiento" "Ok Google, detén el entrenamiento" |
|
Mostrar ritmo cardíaco | "Ok Google, ¿cuál es mi ritmo cardíaco?" "Ok Google, ¿cuál es mi bpm?" |
|
Mostrar recuento de pasos | "Ok Google, ¿cuántos pasos he dado?" "Ok Google, ¿cuál es mi conteo de pasos?" |
|
Puedes consultar la documentación sobre cómo registrarse para recibir los intents de plataforma y acceder a la información de los extras que hay en ellos en el artículo sobre Intents comunes.
Cómo declarar acciones de voz proporcionadas por la app
Si ninguno de los intents de voz de la plataforma te resulta útil, puedes iniciar tus apps directamente con la acción de voz "Iniciar NombreDeMiActividad".
Si quieres registrarte para una acción de "Iniciar", el procedimiento es el mismo que para un ícono de selector en un dispositivo portátil. En lugar de solicitar el ícono de una app en un selector, tu app solicitará una acción de voz.
A fin de especificar el texto que debe decir después de "Inicio", especifica un atributo label
para la actividad que deseas iniciar. Por ejemplo, este filtro de intent reconoce la acción de voz "Start MyRunningApp" y se inicia 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>
Cómo obtener una entrada de voz de formato libre
Además de usar las acciones de voz para iniciar actividades, también puedes llamar a la actividad de reconocimiento de voz incorporada del sistema a fin de obtener la entrada de voz de los usuarios. De esta manera, puedes obtener entradas de los usuarios y procesarlas, como realizar una búsqueda o enviarlas por mensaje.
En tu app, puedes llamar a startActivityForResult()
con la acción ACTION_RECOGNIZE_SPEECH
. Esto inicia la actividad de reconocimiento de voz y, luego, puedes controlar el resultado en onActivityResult()
.
Kotlin
private const val SPEECH_REQUEST_CODE = 0 ... // Create an intent that can start the Speech Recognizer activity private fun displaySpeechRecognizer() { val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply { 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 fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { if (requestCode == SPEECH_REQUEST_CODE && resultCode == Activity.RESULT_OK) { val spokenText: String? = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS).let { results -> results[0] } // Do something with spokenText } super.onActivityResult(requestCode, resultCode, data) }
Java
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); }
Además, puedes consultar los siguientes recursos relacionados: