Ações por voz são uma parte importante da experiência com wearables. Elas permitem que os usuários realizem ações rapidamente e com as mãos livres. O Wear OS by Google oferece dois tipos de ações por voz.
- Fornecidas pelo sistema
- Essas ações por voz são baseadas em tarefas e integradas na plataforma do Wear. Você as filtra na atividade que quiser iniciar quando a ação por voz for falada. Os exemplos incluem "Criar uma nota" e "Definir alarme".
- Fornecidas pelo app
- Essas ações por voz são baseadas em um app e são declaradas como um ícone na tela de início. Os usuários dizem "Iniciar nome do app" para usar essas ações por voz e a atividade que especificada será iniciada.
Declarar ações por voz fornecidas pelo sistema
A plataforma Wear OS oferece vários intents de voz baseados em ações de usuários, como "Criar uma nota" e "Definir alarme". Isso permite que usuários digam se eles querem fazer isso e que o sistema descubra a melhor atividade para ser iniciada.
Quando os usuários falam a ação por voz, seu app pode filtrar o intent acionado para iniciar uma atividade. Se você quiser iniciar um serviço para fazer algo em segundo plano, mostre uma atividade como uma sugestão visual e inicie o serviço na atividade. Chame finish()
quando quiser se livrar da sugestão visual.
Por exemplo, para o comando "Criar uma nota", declare esse filtro de intent para iniciar uma atividade chamada 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>
Esta é uma lista de intents de voz compatíveis com a plataforma Wear:
Nome | Exemplos de frases | Intent |
---|---|---|
Chamar um táxi | "Ok Google, chamar um táxi" "Ok Google, chamar um táxi para mim" |
|
Criar uma nota | "Ok Google, crie uma nota" "Ok Google, crie uma nota para mim" |
|
Definir um alarme | "Ok Google, definir um alarme para 8h" "Ok Google, me acorde às 6h amanhã" |
|
Definir timer | "Ok Google, definir timer para 10 minutos" |
|
Iniciar cronômetro | "Ok Google, iniciar cronômetro" |
|
Começar/parar um passeio de bicicleta | "Ok Google, começar a pedalar" "Ok Google, começar meu passeio de bicicleta" "Ok Google, parar de pedalar" |
|
Começar/parar uma corrida | "Ok Google, acompanhar minha corrida" "Ok Google, começar a corrida" "Ok Google, parar de correr" |
|
Começar/parar um treino | "Ok Google, começar um treino" "Ok Google, acompanhar meu treino" "Ok Google, parar o treino" |
|
Mostrar frequência cardíaca | "Ok Google, qual é a minha frequência cardíaca?" "Ok Google, qual é o meu bpm?" |
|
Mostrar contador de passos | "Ok Google, quantos passos eu dei?" "Ok Google, qual é minha contagem de passos?" |
|
Para ver a documentação sobre registros de intents da plataforma e acesso às informações extras contidas nesses registros, consulte Intents comuns.
Declarar ações por voz fornecidas por app
Se nenhum dos intents de voz da plataforma funcionar com você, inicie seus apps diretamente com uma ação por voz "Abrir MyActivityName".
Registrar uma ação "Abrir" é o mesmo que registrar um ícone na tela de início em um dispositivo portátil. Em vez de solicitar um ícone de app em uma tela de início, seu app solicitará uma ação por voz.
Para especificar o texto a ser falado depois de "Iniciar", especifique um atributo label
para a atividade que você quer iniciar. Por exemplo, este filtro de intent reconhece a ação de voz "Iniciar MyRunningApp" e abre 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>
Captar uma entrada de fala livre
Além de usar ações por voz para iniciar atividades, você também pode chamar a atividade do Reconhecedor de fala do sistema para captar a entrada de fala dos usuários. Isso é útil para captar entradas dos usuários e processá-las, como em uma pesquisa ou ao enviá-las como mensagem.
No app, chame startActivityForResult()
usando a ação ACTION_RECOGNIZE_SPEECH
. Isso inicia a atividade de reconhecimento de fala e você pode processar o resultado em 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); }
Confira também os seguintes recursos relacionados: