Estou corrigindo os trabalhos do pessoal do TECDAM e uma funcionalidade simples do Android que foi utilizada pelo aluno Leonardo Melo me chamou a atenção: o reconhecimento de voz. Essa API foi introduzida na versão 2.1 do Android, e apesar de simples, ela é pouco explorada (por mim inclusive). Para utiliza-la basta é bem simples. Basta chamar a atividade que iniciará o reconhecimento do que será falado, e em seguida obter lista dos textos que foram reconhecidos através do retorno dessa atividade.
Antes de iniciar, precisamos checar se o aparelho suporta essa funcionalidade. Podemos fazer isso através do código abaixo:
PackageManager pm = getPackageManager();
Intent it = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
List<ResolveInfo> activities =
pm.queryIntentActivities(it, 0);
if (activities.size() != 0) {
// Aparelho suporta Reconhecimento de Voz
} else {
// Aparelho NÃO suporta Reconhecimento de Voz
}
Com o PackageManager podemos obter uma lista de informações sobre Activities baseado em uma Intent. O método queryIntentActivities retorna a lista de atividades que respondem por uma determinada ação. No nosso caso, procuramos pela ação ACTION_RECOGNIZE_SPEECH, se alguma Activity responder por essa ação, é porque o aparelho tem suporte ao reconhecimento de voz.
Para iniciar o reconhecimento de voz, basta usar o código abaixo:
Intent intent = new Intent(
RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
"Fala alguma coisa!");
startActivityForResult(intent, MEU_REQUEST_CODE);
Isso resultará na imagem abaixo:
Após capturar a voz, ele fará o reconhecimento e enviará os resultados como resultado da Activity. Para tratar o resultado, usamos o método onActivityResult da atividade que chamou o reconhecimento de voz, conforme abaixo:
protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MEU_REQUEST_CODE
&& resultCode == RESULT_OK) {
// Contém a lista com os resultados
ArrayList<String> matches =
data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
}
}
Mais informações aqui.
4br4ç0s,
nglauber