Cómo agregar funciones de voz

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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"
Acción
com.google.android.gms.actions.RESERVE_TAXI_RESERVATION
Tomar nota "Ok Google, toma nota"

"Ok Google, una nota para mí mismo"
Acción
android.intent.action.SEND
Categoría
com.google.android.voicesearch.SELF_NOTE
Extras
android.content.Intent.EXTRA_TEXT: una string con cuerpo de la nota
Establecer alarma "Ok Google, establece una alarma para las 8 a.m."

"Ok Google, despiértame a las 6 mañana"
Acción
android.intent.action.SET_ALARM
Extras
android.provider.AlarmClock.EXTRA_HOUR: número entero con la hora de la alarma

android.provider.AlarmClock.EXTRA_MINUTES: número entero con el minuto de la alarma

(estos 2 extras son opcionales; puede proporcionarse uno o ninguno)

Establecer temporizador "Ok Google, establece un temporizador de 10 minutos"
Acción
android.intent.action.SET_TIMER
Extras
android.provider.AlarmClock.EXTRA_LENGTH: un número entero de 1 a 86400 (cantidad de segundos que hay en 24 horas) que representa la duración del temporizador
Iniciar cronómetro "Ok Google, inicia el cronómetro"
Acción
com.google.android.wearable.action.STOPWATCH
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"
Acción
vnd.google.fitness.TRACK
Tipo de MIME
vnd.google.fitness.activity/biking
Extras
actionStatus: string con el valor ActiveActionStatus cuando se inicia y CompletedActionStatus cuando se detiene
Comenzar/dejar de correr "OK Google, seguimiento de mi carrera"

"Ok Google, empieza a correr"

"Ok Google, deja de correr"
Acción
vnd.google.fitness.TRACK
Tipo de MIME
vnd.google.fitness.activity/running
Extras
actionStatus: string con el valor ActiveActionStatus cuando se inicia y CompletedActionStatus cuando se detiene
Iniciar/detener un entrenamiento "Ok Google, inicia un entrenamiento"

"Ok Google, haz un seguimiento de mi entrenamiento"

"Ok Google, detén el entrenamiento"
Acción
vnd.google.fitness.TRACK
Tipo de MIME
vnd.google.fitness.activity/other
Extras
actionStatus: string con el valor ActiveActionStatus cuando se inicia y CompletedActionStatus cuando se detiene
Mostrar ritmo cardíaco "Ok Google, ¿cuál es mi ritmo cardíaco?"

"Ok Google, ¿cuál es mi bpm?"
Acción
vnd.google.fitness.VIEW
Tipo de MIME
vnd.google.fitness.data_type/com.google.heart_rate.bpm
Mostrar recuento de pasos "Ok Google, ¿cuántos pasos he dado?"

"Ok Google, ¿cuál es mi conteo de pasos?"
Acción
vnd.google.fitness.VIEW
Tipo de MIME
vnd.google.fitness.data_type/com.google.step_count.cumulative

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: